2011-11-09 24 views
0

我有一个以前的项目运行Ninject 2.0运行时版本2.0,现在我在一个新项目中使用Ninject并使用新的Ninject ,运行版本4.0的ninject web.mvc版本2.2。MVC2与Ninject.Web.Mvc 2.2和Ninject 2.2运行时版本4.0总是要求控制器的无参数构造函数

每一次都让我试图创建类型的HomeController的控制器”时,没有参数的构造函数

无效操作异常

发生错误的错误。确保控制器有一个无参数的公共构造函数。

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

我需要现在定义控制器以及诸如HomeController中的IHomeController接口,我在一些例子中所看到的,还是我回去使用旧版本

+0

我刚切换到旧版本和工作的事情绝对没问题,有啥了新版本的人吗? – user182630

回答

1

我看到的论坛,这个问题提到几次在没有直接回答,这里是解决上述问题,即工作与最新ninject

  1. 从GitHub下载最新Ninject。
  2. 我得到了MVC2的ninject命名为Ninject.Web.Mvc2-2.2.0.0释放净4.0(运行时版本4)加入引用添加Ninject.Web.Mvc.dll期间
  3. 现在(检查版本同上由VS右键属性)
  4. 现在从同一个父文件夹的lib文件夹添加Ninject.dll(检查版本如上)
  5. 现在从扩展文件夹添加CommonServiceLocator.NinjectAdapter.dll lib的父文件夹(检查版本如上)

所有这些缺失的链接都是常见的rviceLocator.dll和正确的版本应该匹配。如果你确定你的绑定与我的绑定是正确的,那么应该尝试这个方法,并检查你的项目是否适用于旧版本。

感谢大家,祝你好运:)

1

有一个版本,这并不表明激活异常,但显示此异常。最有可能的问题是重复的绑定。

+0

我没有为控制器做任何绑定,我假设它将作为ninject的最后一个版本。只要我切换到旧版本的东西工作正常,没有任何改变 – user182630

+0

我不是指控制器绑定,而是作为您的控制器的直接或间接依赖所需的任何绑定。要么缺少一个或多个定义一个。 –

+0

我得到这个异常InvalidOperationException:尝试创建类型HomeController的控制器时发生错误。确保控制器有一个无参数的公共构造函数。]为什么它适用于旧版本而没有任何更改? – user182630

1

除了Remo Gloor所说的内容外,您可能还想检查MVC是否设置为正确使用Ninject。我在MVC插件的旧版本上手动做了一些事情,最后只需要咬下子弹就可以全局扩展我以前一直避免的NinjectHttpApplication类。

如果MVC尝试使用其内置的控制器工厂生成控制器,则会出现错误。所以你可能想要在你的控制器类上创建一个自定义的方法绑定,并在里面放置一个断点,以确保它甚至被调用。

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

+0

我用NinjectHttpApplication扩展了全局变量,正如我所说的,只要我切换到旧版本就可以正常工作 – user182630

+0

我无法登录到团队城市以获取更新的2.3版本任何想法? – user182630

+0

@ user182630单击“以访客身份登录”按钮,找到Ninject项目,找到您感兴趣的特定软件包,并使用“工件”下拉菜单获取最新的发布版本。 – StriplingWarrior

相关问题