【问题标题】:Ninject with MVC3 RTMNinject 与 MVC3 RTM
【发布时间】:2011-01-24 14:51:09
【问题描述】:

我已将 MVC3 从 RC2 升级到 RTM。我们使用的是 Ninject 2.1.0.76,但是一旦我升级,事情就停止了。所以我使用 NuGet 管理器来获取最新的 Ninject、Ninject.MVC3 和 Ninject.Web.Mvc 库(分别为 2.1.0.91、1.0.0.0 和 2.1.0.39)。现在,它会创建一个 AppStart_NinjectMVC3 文件。

我从我的 global.asax 中删除了 NinjectHttpApplication 并将其重新转换为常规 HttpApplication。当我尝试构建时,我得到了;

“调用目标抛出异常”

进一步看,如果我禁用以下行;

DependencyResolver.SetResolver(new NinjectServiceLocator(kernel));

构建通过。但我很确定我不想这样做。

有什么想法吗?

----- 更新 ---------

我创建了一个新的 MVC3 项目,添加了对 Ninject.MVC3 的引用,它构建并运行良好。我比较了 web.config,在两者中没有看到与 Ninject 或 MVC 相关的任何差异。一个新项目没有添加 Ninject.Web.Mvc 库,因此我将其删除并注释掉了所有与此相关的代码,但仍然出现错误。

【问题讨论】:

  • 您是否遇到运行时或编译时错误?

标签: asp.net asp.net-mvc-3 ninject


【解决方案1】:

自 ASP.NET MVC 3 Beta 起,IServiceLocator 接口 is replacedIDependencyResolver 提供。我不确定 Ninject.MVC3 是否已经发布了他们实现此接口的版本。

DependencyResolver.SetResolver(new NinjectServiceLocator(kernel)) 行来看,他们似乎没有。

Here's Ninject 这个接口的简单实现。

更新Ninject.Web.Mvc 库有一个从IDependencyResolver 接口扩展而来的NinjectDependencyResolver 类。我认为你应该使用这个(我这样做了,一切正常)。

【讨论】:

  • 如果我查看 ServiceLocator 的对象浏览器,基本类型显示为 IDependencyResolver。我尝试用示例实现替换定位器,但遇到了同样的问题。
  • 我已将其更改,但我仍然遇到问题。所以这看起来像一个配置问题。我开始的示例项目有 2.1.0.76 的 Ninject,没有 Ninject.Web.Mvc 和 Ninject.MVC3 1.0.0.0。这很好。我的解决方案中的所有项目都有 2.1.0.91,我尝试换回但没有运气。
  • 您可能需要检查 Ninject 库是否依赖于正确的 MVC 库(版本 3 RTM)而不是旧版本。
  • 所以,我检查了 Ninject.MVC3,依赖于 2.1.0.76。所以,我删除了 .91,删除了 ninject.web.mvc .39(因为它是针对 .91 构建的),在 Ninject.76 和 ninject.web.mvc .20 中添加。我现在失去了 NinjectDependancyResolver(似乎是在 .39 中添加的),我又回到了同样的问题。
  • 正如 Remo Gloor 所建议的,我认为您不需要 Ninject.MVC3 库。我从来没有用过它,虽然名字暗示你需要它。只需使用Ninject.Web.Mvc,使用其中的NinjectDependencyResolver 类,一切都会正常工作。
【解决方案2】:

从这里下载 dll

https://github.com/ninject/ninject/archives/master

https://github.com/ninject/ninject.web.mvc/archives/master

另外,不要使用 Ninject.MVC3 你只需要 Ninject.Web.Mvc

我也有一篇文章记录了相同的here

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多