使用Autofac将指定的键控/命名项列表注入组件

时间:2015-01-29 11:49:44

标签: c# autofac

我有一个接口IService,我有多个实现。我有一个ConsumerClass课,它以IEnumerable<IService>为参数。我意识到,如果我离开它,Autofac将自动创建可枚举并填充所有已注册的服务实现,但我想指定注入哪些实现。

这样做的原因是ConsumerClass可能有一个实现,但在Autofac中注册了两次 - 唯一的区别是注入了什么。

1 个答案:

答案 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),
        })
});