使用 Autofac 将指定 keyed/named 项的列表注入组件

Use Autofac to inject a list of specified keyed/named items into component

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

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

我无意中发现了这一点。基本上,ResolvedParameter 构造函数的第二个参数 returns 结果填充它,因此我可以自己创建列表。它并不完美,但它有效:

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