Ceci est du modèle de l'usine, où une propriété est utilisée pour obtenir une instance via Create
:Utilisation d'action au lieu de Func
public class Dialer
{
public static Func<Dialer> Create;
public bool MakeCall(string number) ...
public Dialer(IDialer impl) { ... }
}
Ensuite, une expression lambda est affecté au délégué de la propriété dans le projet spécifique à la plateforme avec
Dialer.Create =() => new Dialer(new PhoneDialeriOS());
et pour obtenir une instance dans le projet de plate-forme indépendante que j'utilise
this.dialer = Dialer.Create();
Maintenant, je suis à la recherche d'utiliser
public static Action<Dialer> Create;
Si je reçois ce droit, l'affectation est maintenant
Dialer.Create = (d) => new Dialer(new PhoneDialeriOS());
mais comment puis-je obtenir une instance?
this.dialer = // ?
En utilisant this.dialer = Dialer.Create();
je reçois
Erreur CS7036 Il n'y a aucun argument donné qui correspond au paramètre formel requis 'obj' de 'Action'
Mais il ne Il est logique de passer une instance de PhoneDialeriOS
ici, car il n'y a pas d'accès dans le code indépendant de la plate-forme. Je pense que l'exemple dont je parle est trompeur ou qu'il me manque quelque chose.
C'est la chose. L'exemple parle de 'public static Action Create;', mais cela n'est pas possible car je ne peux pas passer l'instance. Imho l'exemple est faux. 'public static Action Créer;' est le seul moyen correct. –
testing
'public static Action Create' est toujours un délégué qui ne renvoie rien. Je ne sais pas comment vous pouvez considérer une usine qui ne peut produire rien comme "la seule façon correcte". –
Joey
Vous avez raison. J'ai fait une erreur de copier et coller. 'public static Func Créer;' est la seule façon correcte. –
testing