J'essaie de comprendre le modèle d'usine délégué avec Autofac. Je sais comment implémenter l'usine à l'aide iIndex <> avec détrompeur() l'inscription, qui est expliqué bien ici: Configuring an Autofac delegate factory that's defined on an abstract classUsine de délégué Autofac en utilisant func <>
Je voudrais savoir si je peux créer une usine à l'aide Func <>, et comment pourrais-je faire la inscriptions pour l'exemple suivant:
public enum Service
{
Foo,
Bar
}
public interface FooService : IService
{
ServiceMethod();
}
public interface BarService : IService
{
ServiceMethod();
}
public class FooBarClient
{
private readonly IService service;
public FooBarClient(Func<Service, IService> service)
{
this.service = service(Service.Foo);
}
public void Process()
{
service.ServiceMethod(); // call the foo service.
}
}
Pourquoi ne pas simplement utiliser 'IIndex <>' avec 'Keyed()'? Autofac ne peut pas créer ce 'Func' pour vous. Vous devez l'enregistrer dans votre conteneur en utilisant 'Keyed()' ou 'Named()' quelque chose comme: 'builder.Register > (c => s => c.ResolveKeyed (s) Les usines déléguées peuvent seulement créer un type avec des paramètres et ne pas choisir un type basé sur un paramètre parce que c'est ce qui est 'IIndex <>' pour. –
nemesv
Pour IIndex <> je vais devoir référencer la bibliothèque Autofac que j'essaye d'éviter. Je veux que mon code DI soit en racine composite (bibliothèque séparée) seulement si possible. –