带有Ninject.Web.Mvc 2.2和Ninject 2.2运行时版本4.0的MVC2总是要求控制器的无参数构造函数

时间:2011-11-09 13:23:32

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

我有一个运行Ninject 2.0运行时版本2.0的先前项目,现在我在一个新项目中使用Ninject并使用新的Ninject,ninject web.mvc 2.2版用于运行时版本4.0。

每次我得到错误都没有无参数构造函数

无效的操作异常

尝试创建HomeController类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。

我错过了什么。所有绑定都已注册。

我是否需要现在为控制器定义接口,例如HomeController作为IHomeController,正如我在一些示例中看到的那样,或者我是否回到使用旧版本

3 个答案:

答案 0 :(得分:1)

有一个版本没有正确显示激活异常但显示此异常。最有可能的问题是重复绑定。

答案 1 :(得分:1)

除了Remo Gloor所说的,你可能还想检查MVC是否设置为正确使用Ninject。我在较旧版本的MVC插件上手动做了一些事情,最后需要咬住子弹并使Global扩展NinjectHttpApplication类,这是我以前一直在避免的。

您遇到的错误是MVC尝试使用其内置控制器工厂生成控制器时会出现的错误。因此,您可能希望在控制器类上创建自定义方法绑定,并在其中放置断点以确保它甚至被调用。

您可能还想切换到2.3版。您可以获取Ninject的最新版本及其所有扩展here

答案 2 :(得分:1)

我在论坛上已经多次提到这个问题没有直接答案,这里是解决上述问题的方法,即使用最新的ninject

  1. 从github下载最新的Ninject。
  2. 我为MVC2获得的ninject被命名为Ninject.Web.Mvc2-2.2.0.0-release-net-4.0(运行时版本4)
  3. 现在在添加引用期间添加Ninject.Web.Mvc.dll(通过在VS中右键单击属性检查版本与上面相同)
  4. 现在从同一父文件夹中的lib文件夹添加Ninject.dll(查看上面的版本)
  5. 现在从lib父文件夹的extensions文件夹中添加CommonServiceLocator.NinjectAdapter.dll(查看上面的版本。)
  6. 所有这些中缺少的链接都是commonserviceLocator.dll,正确的版本应该匹配。如果你确定你的绑定是正确的,那么应该尝试这一点,并检查你的项目是否适用于旧版本。

    感谢大家,祝你好运:)