【发布时间】:2019-09-20 08:44:09
【问题描述】:
我想知道是否可以使用 Autofac 注册同一类的不同实例,然后在消费者类的构造函数中使用属性解析正确的实例。
我知道我们可以注册 2 种不同的接口实现,并使用属性解析好的实现。例如:
ContainerBuilder cb = new ContainerBuilder();
cb.RegisterType<EnglishHello>().Keyed<IHello>("EN");
cb.RegisterType<FrenchHello>().Keyed<IHello>("FR");
cb.RegisterType<HelloConsumer>().WithAttributeFilter();
var container = cb.Build();
并且依赖项将像这样使用:
public class HelloConsumer {
public HelloConsumer([KeyFilter("EN")] IHello helloService)
{ }
}
第一个示例一切正常。
我尝试了以下方法:
var helloEn=new Hello();
var helloFr=new Hello();
//init properties...
helloFr.Greetings="Salut";
helloEn.Greetings="Hi";
cb.Register<Hello>(x=>helloEn).Keyed<IHello>("EN");
cb.Register<Hello>(x=>helloFr).Keyed<IHello>("FR");
编译正常,但是在解析HelloConsumer类的过程中,构造函数的参数“helloService”为空。
是否有可能使用 Autofac 实现这种行为,还是我错过了什么?
(与Autofac named registration constructor injection相关但不是同一个问题)
【问题讨论】: