9

我有一个想要移植到 MVC4 的 MVC3 应用程序。我正在使用 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

4

2 回答 2

14

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

于 2012-09-13T15:02:31.583 回答
0

只需简单地添加命名空间

Using Ninject;

从 Nuget 安装模板后...你只需从 Nuget 模板安装“Ninject”而不是“Ninject for MVC3”

于 2013-08-14T07:01:30.517 回答