generic examples ejemplo delegate delegado delegates autofac factory-pattern

delegates - examples - func string c#



Fábrica de delegados Autofac utilizando func<> (1)

Autofac no puede construir este Func<Service, IService> para usted, lo que le permite devolver diferentes tipos basados ​​en un parámetro. Esto es lo que IIndex<> es para.

Sin embargo, si no quiere / no puede usar IIndex<> , puede crear esta función de fábrica con la ayuda de la Keyed o el Named y registrar su fábrica en el contenedor:

var builder = new ContainerBuilder(); builder.RegisterType<FooBarClient>().AsSelf(); builder.RegisterType<FooService>().Keyed<IService>(Service.Foo); builder.RegisterType<BarService>().Keyed<IService>(Service.Bar); builder.Register<Func<Service, IService>>(c => { var context = c.Resolve<IComponentContext>(); return s => context.ResolveKeyed<IService>(s); });

Estoy tratando de entender el patrón de fábrica delegado con Autofac. Sé cómo implementar fábrica usando IIndex <> con el registro Keyed (), que se explica muy bien aquí: Configurar una fábrica de delegados Autofac que está definida en una clase abstracta

Me gustaría saber si puedo crear una fábrica usando Func <>, y cómo haría los registros para la siguiente muestra:

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. } }