在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂

时间:2013-03-11 08:19:17

标签: asp.net ninject

在使用Ninject和asp.net mvc 4时,我无法通过谷歌的.net提供大量文档。

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

另外,构造函数注入真的是我们可以用MVC 4进行依赖注入的唯一方法,因为当我将它们与我的控制器一起使用时,属性注入和方法注入似乎不起作用

2 个答案:

答案 0 :(得分:9)

我不是Ninject的专家,但就我所知,我只是用它来将我的DataSource Interface和我的EfDb Class链接到我的应用程序的其余部分。

如果您需要一本围绕Ninject构建Real应用程序的好书,请尝试: 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>();
    }
}

然后在NinjectControllerFactory注册您的Global.asax.cs

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

如您所见,此课程使用Method Injection使用private void AddBindings()。如果您关注Test Driven Development (TDD)

,这将非常容易

答案 1 :(得分:2)

请参阅此处的文档: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers,“唯一需要做的就是为其依赖项配置Ninject绑定。即使没有添加绑定,Ninject也可以找到控制器本身。”

NInject将自动设置您的控制器依赖项(前提是它具有这些类型的绑定)。