I realize constructor injection is preferred but I'm curious how to use Ninject's contextual 'Named Bindings' when using another form of injection.
Specifically how do I do the following when using DependencyResolver or property injection.
public MyService([Named("Alpha")] IRepository repository)
{
this.repository = repository;
}
ryber
You can create a named binding to work on Alpha:
Bind<IRepository>().To<AlphaRepository>().Named("Alpha");
then you can specify others like:
Bind<IRepository>().To<AnotherRepository>().Named("Beta");
When your example constructor is used you will get the AlphaRepository.
In order to use the name with a property give the property a name attribute just like you you did for the param:
[Inject, Named("Alpha")]
public IRepository Foo {get; set;}
来源:https://stackoverflow.com/questions/6133431/how-to-use-ninject-named-bindings-with-dependencyresolver-and-propertyinjection