c# - 让最新的 Ninject 与最新的 MVC 5/Web Api 2 一起工作?

标签 c# ninject asp.net-web-api2 asp.net-mvc-5.1

我知道有几个问题有点像这个问题,但由于我找不到任何文档,而且其他问题都没有任何对我有帮助的答案,这里是:

我创建了一个新的 ASP.NET 应用程序 (VS2013),选择了 MVC,我添加了 API。我在包控制台中运行“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>

在 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 执行。

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

关于c# - 让最新的 Ninject 与最新的 MVC 5/Web Api 2 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23359001/

相关文章:

c# - 可以将泛型类型列表转换为其父类(super class)型的泛型列表吗?

c# - WebAPI 传递的 post 参数为空

c# - Web Api 中的 Post 请求中的 Request Body 为 null

angularjs - 将日期从 Angular 传递到 Web API 2 的正确方法

C# Web API - 通过客户端证书对用户进行身份验证

C# 如何暂停我的程序并等待来自 WinForm 的键盘输入

c# - 如何将 DataReader 中的值放入 List<T>?

.net - 统一的惰性依赖注册

elasticsearch - 使用 2.X NEST 客户端获取搜索响应的请求正文

asp.net-mvc - 让 AsyncController 与 Ninject 一起工作