[英]autofac's Func<T> to resolve named service
Given registered services: 鉴于注册服务:
builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();
Can I retrieve named implementations of IFoo
interface by injecting something like Func<string, IFoo>
? 我可以通过注入类似
Func<string, IFoo>
东西来检索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);
}
I know I can do it with Meta<>
, but I don't want to use it. 我知道我可以用
Meta<>
做,但我不想用它。
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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.