我正在尝试理解Autofac中的委托工厂模式。我知道如何使用通过Keyed()注册的IIndex<>实现工厂,这在这里得到了很好的解释:配置定义在抽象类中的Autofac委托工厂
我想知道是否可以使用Func<>创建工厂,以及如何为以下示例进行注册:
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.
}
}
IIndex<>
和Keyed()
直接进行注册?Autofac 无法为您创建此Func<Service, IService>
。 您需要在容器中使用Keyed()
或Named()
进行注册,例如:builder.Register<Func<Service, IService>>(c => s => c.ResolveKeyed<IService>(s));
委托工厂只能使用参数创建一种类型,并且不能根据参数选择类型,因为这就是IIndex<>
的作用。 - nemesv