Как использовать Ninject именованные привязки с DependencyResolver и PropertyInjection - PullRequest
6 голосов
/ 26 мая 2011

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

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

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

1 Ответ

17 голосов
/ 29 мая 2011

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

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

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

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

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

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

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