2013-03-11 50 views
7

我在为使用Ninject用asp.net mvc的关于如何处理文档提供.NET众多通过谷歌做损失4在ASP.NET MVC使用Ninject当控制器工厂neccessary 4

首先,我想知道控制器工厂是否需要在asp.net中。

还有,就是构造函数注入真是我们所能做的依赖注入MVC​​ 4,因为财产注入和方法注入似乎并不当我使用他们与我的控制器

回答

9

我不是Ninject的专家一起工作的唯一途径但据我所知,我只用它将我的DataSource Interface和我的EfDb Class链接到我的应用程序的其余部分。

如果你需要有大约Ninject尝试建立一个真正的应用程序一本好书: Pro ASP.NET MVC 3 Framework, Third Edition

Pro Asp.Net Mvc 4

有代码非常几行我通常关心

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = new StandardKernel(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null 
        ? null 
        : (IController) ninjectKernel.Get(controllerType); 
    } 

    private void AddBindings() 
    { 
     ninjectKernel.Bind<IDataSource>().To<EfDb>(); 
    } 
} 

然后注册您的NinjectControllerFactoryGlobal.asax.cs有:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

正如你所看到的,这个类使用Method Injection使用private void AddBindings()。这使得它非常容易,如果你是以下Test Driven Development (TDD)

+0

但是我读了一些地方,如果你的应用程序继承自NinjectHttpApplication并重写适当的方法,控制器将通过IOC容器自动地具有依赖关系statisfied。 – 2013-03-11 15:54:53

+0

@PeterEdike每个人都有他们自己的编写代码的方式,这个游戏全部是关于拾取一种可以工作并在路上改进的风格。我建议你阅读我提到的那些书之一。 – Komengem 2013-03-11 19:20:15

+0

是的,我已经得到了这本书。我现在正在阅读它 – 2013-03-12 16:13:28

2

在这里看到的文档: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers“,即必须做的唯一一件事就是配置Ninject绑定其依赖控制器本身将Ninject发现即使而无需添加绑定。“

NInject会自动设置您的控制器依赖关系(假设它具有这些类型的绑定)。

+0

我正在使用MVC5/WebApi2,并且此方法对我无效。 @Komengem的建议奏效了。 – codeMonkey 2017-02-09 07:43:17