How to make Ninject to instantiate object based on variable on run time?.
I am trying to inject the correct Repository in The Controller action - MVC 3 - based on
You could inject an Abstract Factory (probably just a Func<string,ICarRepository>
) and then have it all implemented via adding the following to your RegisterServices
:
Bind<ICarRepository>().To<KiaRepository>().Named("KIA")
Bind<ICarRepository>().To<BmwRepository>().Named("BMW")
Bind<Func<string,ICarRepository>>()
.ToMethod( ctx=> name => ctx.Get<ICarRepository>( name));
In your ctor:
class MyController
{
readonly Func<string,ICarRepository> _createRepository;
public MyController(Func<string,ICarRepository> createRepository)
{
_createRepository = createRepository;
}
Then, in your action:
[HttpPost]
public ActionResult SearchResult(FormCollection values)
{
string carModel = values["model"];
using( ICarRepository myRepository = _createRepository( carModel))
{
...
}
}