Autofac délégué de l'usine à l'aide de la touche func<>

J'essaie de comprendre le délégué de l'usine modèle avec Autofac. Je sais comment le mettre en œuvre en usine à l'aide de IIndex<> avec Détrompeur() de l'enregistrement, qui est bien expliqué ici: La configuration d'un Autofac délégué de l'usine qui est définie sur une classe abstraite

Je voudrais savoir si je peux créer une usine à l'aide de la touche Func<>, et comment faire les 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<Service, IService> pour vous. Vous devez l'enregistrer dans votre récipient avec l'aide de Keyed() ou Named() quelque chose comme: builder.Register<Func<Service, IService>>(c => s => c.ResolveKeyed<IService>(s)); Délégué usines ne pouvez créer qu'un seul type de paramètres et de ne pas choisir un type de paramètre car c'est ce qui est IIndex<> pour.
Pour IIndex<> je vais avoir besoin de faire référence à l'Autofac bibliothèque que j'essaie d'éviter. Je veux que mon DI de code en Composite racine (bibliothèque séparée) seulement si cela est possible.

OriginalL'auteur Narayan Akhade | 2013-03-14