Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How To Use Ninject Named Bindings With DependencyResolver and PropertyInjection

Tags:

c#

ninject

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;
}
like image 884
Mark Avatar asked May 26 '11 03:05

Mark


1 Answers

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;}
like image 90
ryber Avatar answered Oct 25 '22 06:10

ryber