Как использовать именованные привязки Ninject с DependencyResolver и PropertyInjection

#c# #ninject

#c# #ninject

Вопрос:

Я понимаю, что предпочтительнее внедрение конструктора, но мне любопытно, как использовать контекстные «Именованные привязки» Ninject при использовании другой формы внедрения.

В частности, как мне сделать следующее при использовании DependencyResolver или внедрения свойств.

 public MyService([Named("Alpha")] IRepository repository)
{
    this.repository = repository;
}
  

Ответ №1:

Вы можете создать именованную привязку для работы с Alpha:

 Bind<IRepository>().To<AlphaRepository>().Named("Alpha");
  

затем вы можете указать другие, такие как:

 Bind<IRepository>().To<AnotherRepository>().Named("Beta");
  

При использовании вашего конструктора example вы получите AlphaRepository.

Чтобы использовать имя со свойством, присвойте свойству атрибут name точно так же, как вы это сделали для параметра:

 [Inject, Named("Alpha")]
public IRepository Foo {get; set;}
  

Комментарии:

1. Я знаю, как создать именованную привязку, и я знаю, как использовать привязку с конструктором. Мой вопрос в том, как мне использовать именованную привязку при выполнении инъекции через внедрение свойств.

2. Обновлено, чтобы ответить на ваш вопрос