解析多键服务
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
我不确定我错过了什么。我有多个派生自单个接口的服务组。每组需分别解决:
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