提供注册服务:
builder.RegisterType<Foo1>().Named<IFoo>("one").As<IFoo>();
builder.RegisterType<Foo2>().Named<IFoo>("two").As<IFoo>();
builder.RegisterType<Foo3>().Named<IFoo>("three").As<IFoo>();
我可以通过注入(inject)类似
IFoo
的方式检索Func<string, IFoo>
接口(interface)的命名实现吗?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);
}
我知道我可以使用
Meta<>
来做到这一点,但我不想使用它。 最佳答案
您可以这样注册自己的解析委托(delegate):
builder.Register<Func<string, IFoo>>(c =>
{
var cc = c.Resolve<IComponentContext>();
return named => cc.ResolveNamed<IFoo>(named);
});
关于c# - autofac的Func <T>解析命名服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2888621/