Ninject和asp.net MVC4

时间:2012-09-13 14:23:52

标签: c# asp.net-mvc-4 ninject

我有一个MVC3应用程序,我想移植到MVC4。我正在使用Ninject进行依赖注入。使用Nuget,我在项目中添加了“Ninject”并创建了一个控制器工厂,如下所示

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()
    {
        //Add ninject bindings here
    }
}

这适用于MVC3,但MVC4中的情况发生了变化。我做了一些挖掘,发现这个链接解释了如何让ninject为MVC4工作

http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx

但是,我无法在上面的链接中获取代码进行编译。具体来说,我应该放在web.common文件的Start()方法中的代码给我未解决的命名空间错误

GlobalConfiguration.Configuration.ServiceResolver
  .SetResolver(DependencyResolver.Current.ToServiceResolver());

“ServiceResolver”和“.SetResolver”都未解析。我需要添加哪些参考才能启用这些参考?另外,如果可能的话,你可以指点我一个教程,向我展示如何让ninject在MVC4中工作,而无需安装nuget包ninject.mvc3吗?我问,因为我不希望在我的应用程序中安装任何专门为MVC3编写的软件包,以避免在更新这些nuget软件包时破坏行。

编辑:我应该补充说我使用的是Visual Studio 2012和.Net 4.5

2 个答案:

答案 0 :(得分:14)

菲尔的文章是关于将Ninject与WebAPI一起使用。你是这个意思吗?对于正常的MVC注入,您不需要这样做。此外,你应该使用Ninject.MVC3 NuGet包与MVC4(是的,我知道它说MVC3,但它仍然可以正常工作,因为NuGet设置汇编版本重定向,使一切正常工作),这设置一切,你不要需要一个控制器工厂。只需编辑NinjectWebCommon.cs文件即可添加绑定。

答案 1 :(得分:0)

只需简单地添加命名空间

Using Ninject;
从Nuget安装模板后

你只需要从Nuget Template

安装“Ninject”而不是“Ninject for MVC3”