解析多键服务

Resolving multiple keyed services

我不确定我错过了什么。我有多个派生自单个接口的服务组。每组需分别解决:

builder.RegisterType<Bar1>().Keyed<IFoo>("Bars");
builder.RegisterType<Bar2>().Keyed<IFoo>("Bars");
builder.RegisterType<Foo1>().Keyed<IFoo>("Foos");
builder.RegisterType<Foo2>().Keyed<IFoo>("Foos");

什么有效:

var keyfoos = scope.ResolveKeyed<IEnumerable<IFoo>>("Foos");
Console.Write("resolved keyfoos: ");
Console.WriteLine(foos == null ? "null" : keyfoos.Count().ToString());

resolved keyfoos: 2

实际问题是注入那些关键服务:

public class FooBar
{
    public FooBar(
        [KeyFilter("Foos")]
        IEnumerable<IFoo> foos, 
        [KeyFilter("Bars")]
        IEnumerable<IFoo> bars)
    {
        Console.Write("ctor key foos: ");
        Console.WriteLine(foos == null ? "null" : foos.Count().ToString());
        Console.Write("ctor key bars: ");
        Console.WriteLine(bars == null ? "null" : foos.Count().ToString());
    }
}

scope.Resolve<FooBar>();

结果:

ctor key foos: 0

ctor key bars: 0

我希望 "lists" 的计数都是 2 而不是 0。我错过了什么?

使用 KeyFilterAttribute 向构造函数注册 class 还需要 WithAttributeFiltering()

而不是:

builder.RegisterType<FooBar>().AsSelf();

我需要

builder.RegisterType<FooBar>().AsSelf().WithAttributeFiltering();

所以现在的结果是:

ctor key foos: 2

ctor key bars: 2