我知道有几个问题有点像这个问题,但由于我找不到任何文档,而且其他问题都没有任何对我有帮助的答案,这里是:
我创建了一个新的 ASP.NET 应用程序 (VS2013),选择了 MVC,我添加了 API。我在包控制台中运行“update-package”以更新到最新版本(MVC 5.1.2、Web Api 5.1.2)。
然后我添加新的 Ninject.MVC5和 Ninject.Web.WebApi包。
我将这些行添加到 web.config 文件(Ninject 想要 5.0 版,我有 5.1 版):
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
在 App_start/NinjectWebCommon.cs 文件中,我添加了一个绑定(bind):
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
然后我添加一个 ApiController,将 ILogger 作为构造函数中的单个参数,并将 ILogger 作为参数添加到 HomeController 的构造函数。
这应该是用于测试的吗?
我是否遗漏了 WebApi 的一些接线?或者这是否发生在“幕后”?
无论如何,访问 api Controller 会给我这个错误:
An error occurred when trying to create a controller of type 'TestController'. Make sure that the controller has a parameterless public constructor.
尝试使用 HomeController 给我这个:
Object reference not set to an instance of an object.
我试过同样的事情,但没有更新到最新的软件包,同样的问题。我多年来一直在使用 Ninject 和 MVC 3(我也尝试过 Ninject.MVC3 包),但我完全不知道为什么它不起作用。对于 WebApi,我有点期待对 SetResolver 的一些调用,但是..
如有任何帮助,我们将不胜感激!
最佳答案
如 documentation 所述Ninject.Web.WebApi 不是独立的 Nuget 包。 为您的应用程序选择合适的 Ninject.Web.WebApi.* 包。在您的情况下,很可能会由 Ninject.Web.WebApi.WebHost 执行。
- 创建空的 Web 应用程序
- 安装 Ninject.MVC5
- 安装 Ninject.Web.WebApi.WebHost
- 更新所有 Nuget 包
- 创建一个接受 ILogger 依赖的 Mvc Controller 和 ApiController
- 为 MVC 和 WebAPI 注册一次 ILogger
- 运行
关于c# - 让最新的 Ninject 与最新的 MVC 5/Web Api 2 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23359001/