Я хотел бы знать, возможно ли зарегистрировать различные экземпляры одного и того же класса в 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 именованный инжектор конструктора регистрации , но не та же проблема)