获取最新的Ninject使用最新的MVC 5/Web Api 2?

Ste*_*rup 12 c# ninject asp.net-web-api2 asp.net-mvc-5.1

我知道有几个问题有点像这个,但由于我无法找到任何文档而其他问题都没有任何答案可以帮助我,这里有:

我创建了一个新的ASP.NET应用程序(VS2013),选择了MVC,我添加了API.我在Package Console中运行"update-package"以更新到最新版本(MVC 5.1.2,Web Api 5.1.2).

然后我添加新的Ninject.MVC5Ninject.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>
Run Code Online (Sandbox Code Playgroud)

在App_start/NinjectWebCommon.cs文件中,我添加了一个绑定:

    private static void RegisterServices(IKernel kernel) {
        kernel.Bind<ILogger, NLogLogger>();
    }
Run Code Online (Sandbox Code Playgroud)

然后我添加一个ApiController,ILogger作为构造函数中的单个参数,我将ILogger作为参数添加到HomeController的构造函数中.

那应该是测试吗?

我错过了WebApi的一些接线吗?或者这是在"幕后"发生的?

无论如何,访问api控制器给了我这个错误:

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

尝试HomeController给了我这个:

你调用的对象是空的.

我尝试了同样的事情,没有更新到最新的包,同样的问题.我已经使用Ninject多年使用MVC 3(我也尝试过Ninject.MVC3包),并且我完全不知道为什么它不起作用.使用WebApi,我有点期待对SetResolver的一些调用,但是......

任何帮助都会得到满足!

Rem*_*oor 13

正如文档中提到的,Ninject.Web.WebApi不是一个独立的Nuget包.为您的应用程序选择适当的Ninject.Web.WebApi.*包.在你的情况下,很可能是Ninject.Web.WebApi.WebHost.

  1. 创建空Web应用程序
  2. 安装Ninject.MVC5
  3. 安装Ninject.Web.WebApi.WebHost
  4. 更新所有Nuget包
  5. 创建一个具有ILogger依赖关系的Mvc Controller和ApiController
  6. 为MVC和WebAPI注册一次ILogger


Rem*_*oor 10

这不是MVC/WebApi问题

你的配置错了:

kernel.Bind<ILogger, NLogLogger>();
Run Code Online (Sandbox Code Playgroud)

应该

kernel.Bind<ILogger>().To<NLogLogger>();
Run Code Online (Sandbox Code Playgroud)