【问题标题】:Ninject and asp.net MVC4Ninject 和 asp.net MVC4
【发布时间】:2012-09-13 14:23:51
【问题描述】:

我有一个想要移植到 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不需要 WebAPI。我应该在 NinjectWebCommon.cs 中的哪里添加绑定?在“开始”方法中?另外,您是否认为 ninject.mvc3 包的更新可能会破坏我的应用程序?谢谢
    • @curiouspanda - 更新总是会破坏事物,Ninject 经历了一些迭代,改变了“首选”的使用方式,但总的来说代码应该保持兼容。如果您不使用 WebAPI,则 Phil 的文章不适用。您在 NinjectWebCommon.cs 的 RegisterServices 方法中注册您的映射
    【解决方案2】:

    只需添加命名空间

    Using Ninject;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多