没有Ninject的无参数构造函数,包括MVC和Web Api

时间:2016-01-08 08:10:06

标签: asp.net-mvc ninject asp.net-web-api2

在将此标记为重复之前,请花点时间阅读问题!

我在VS2015中创建了一个新的Web应用程序项目,添加了MVC 5和Web Api 2.

我已将以下软件包添加到项目中:

client_type

这在App_Start文件夹中创建了Ninject Ninject.MVC5 Ninject.Web Ninject.Web.Common Ninject.Web.Common.WebHost Ninject.Web.WebApi Ninject.Web.WebApi.WebHost NinjectWeb.cs文件。两者都有断点,我知道它们会在启动时受到打击。

但我还是得到了

  

没有为此对象定义无参数构造函数

点击MVC控制器和

时出现

错误

  

确保控制器具有无参数的公共构造函数。

点击Web Api控制器时出现

错误。

所以我有一个“解决”问题的解决办法,我已将这2行添加到NinjectWebCommon.cs文件的CreateKernel方法中:

NinjectWebCommon.cs

所以问题:在Ninject代码中应该处理这个问题?我想把GitHub上的代码弄清楚以便将它排除在外,但是想要一些关于我应该看的内容的提示?

编辑:GlobalConfiguration.Configuration.DependencyResolver = new Ninject.Web.WebApi.NinjectDependencyResolver(kernel); System.Web.Mvc.DependencyResolver.SetResolver(new Ninject.Web.Mvc.NinjectDependencyResolver(kernel)); 方法的内容:

RegisterServices

1 个答案:

答案 0 :(得分:0)

我刚刚对Ninject和MVC进行了一些实验。我碰巧在你的实时网站上提到了你在问题中提到的两行,但我没有机会真正考虑到为什么它们被要求到现在为止,除了我需要它注入WebAPI。

我在Visual Studio中创建了一个全新的ASP.NET MVC项目,安装了Nuget包Ninject.MVC5。我添加了一个简单的接口,具体的实现,并添加了RegisterServices()类的NinjectWebCommon方法的绑定。

将绑定添加到MVC控制器后,它刚刚起作用,接口在我的构造函数中被解析为具体类。似乎Ninject的MVC版本直接“开箱即用”,可以说,无需明确分配依赖注入器。

我查看了Github for Ninject.Web.WebApi,主页面上有一个示例项目,您可以下载该项目有三个示例应用程序注入WebAPI。解决方案中的示例WebAPI示例(不是OwinHosted或SelfHosted项目)也没有DependencyResolver的赋值...我在恢复Nuget包之后运行它并且它可以工作。

我意识到这并没有完全回答这个问题,但我认为仔细研究WebApi示例项目可能会揭示答案。要么是这个问题,要么问题是因为ASP.NET MVC和WebAPI存在于同一个项目中,我们想要注入两者?