我有一个接口IService
,我有多个实现。我有一个ConsumerClass
课,它以IEnumerable<IService>
为参数。我意识到,如果我离开它,Autofac将自动创建可枚举并填充所有已注册的服务实现,但我想指定注入哪些实现。
这样做的原因是ConsumerClass
可能有一个实现,但在Autofac中注册了两次 - 唯一的区别是注入了什么。
答案 0 :(得分:0)
我意外地想到了这一点。基本上,ResolvedParameter构造函数的第二个参数返回结果来填充它,因此我可以自己创建列表。它并不完美,但它有效:
builder.RegisterType<Component>().WithParameters(new[] {
new ResolvedParameter((p,c) => p.Name == "serv",(p,c) =>
new List<ITerry>
{
c.ResolveKeyed<IService>(Services.Svc1),
c.ResolveKeyed<IService>(Services.Svc3),
c.ResolveKeyed<IService>(Services.Svc8),
})
});