autofac的Func键< T>解决命名服务
问题描述:
由于注册的服务:
builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();
我可以找回的IFoo
命名实现接口通过注入类似 Func键<字符串,IFoo的>
Can I retrieve named implementations of IFoo
interface by injecting something like Func<string, IFoo>
?
public class SomeClass(Func<string, IFoo> foo) {
var f = foo("one");
Debug.Assert(f is Foo1);
var g = foo("two");
Debug.Assert(g is Foo2);
var h = foo("three");
Debug.Assert(h is Foo3);
}
我知道我可以用元<做到这一点;> ;
,但我不希望使用它
答
您可以注册自己解决委托是这样的:
You could register your own resolving delegate like this:
builder.Register<Func<string, IFoo>>(c =>
{
var cc = c.Resolve<IComponentContext>();
return named => cc.ResolveNamed<IFoo>(named);
});