我知道有几个问题有点像这个问题,但是由于我找不到任何文档,而且其他问题都没有任何对我有帮助的答案,所以这里是:
我创建了一个新的 ASP.NET 应用程序(VS2013),选择了 MVC,我添加了 API。我在 Package Console 中运行“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 文件中,我添加了一个绑定:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
然后我添加一个ApiController,ILogger作为构造函数中的单个参数,我将ILogger作为参数添加到HomeController的构造函数中。
那应该是用来测试的吧?
我是否缺少 WebApi 的一些接线?还是发生在“幕后”?
无论如何,访问 api 控制器会给我这个错误:
尝试创建类型为“TestController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。
并尝试 HomeController 给了我这个:
你调用的对象是空的。
我试过同样的事情,没有更新到最新的包,同样的问题。多年来,我一直在使用 Ninject 和 MVC 3(我也尝试过 Ninject.MVC3 包),但完全不知道为什么它不起作用。使用 WebApi,我有点期待调用 SetResolver,但是..
任何帮助将不胜感激!