Parameterized Factories Using Ninject

后端 未结 1 1928
臣服心动
臣服心动 2021-02-11 08:59

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

相关标签:
1条回答
  • 2021-02-11 09:30

    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)) 
         {
                ... 
         } 
    }
    
    0 讨论(0)
提交回复
热议问题