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