Ninject和WebAPI:从NuGet安装后开始使用

awj*_*awj 3 c# dependency-injection ninject nuget asp.net-web-api

我通过Package Manager控制台安装了NuGet包Ninject Integration for WebApi2.

根据项目的GitHub页面上wiki,这应该创建一个NinjectWebCommon在App_Start文件夹中调用的类.但事实并非如此.

同样的GitHub wiki页面解释了你应该看到的内容,以便你自己添加它.所以我尝试NinjectWebCommon自己创建课程.这里的问题是我找不到OnePerRequestModule以下代码段中的命名空间.

public static void Start()
{
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
    bootstrapper.Initialize(CreateKernel);
}
Run Code Online (Sandbox Code Playgroud)

替代方案,并根据GitHub维基页面两者之间没有有效区别,就是修改global.asax.所以我尝试了这种方法并添加了一些像这样的绑定

private void RegisterServices(IKernel kernel)
{
    kernel.Bind<IEntityAccess>().To<EntityAccess>();
    kernel.Bind<IDictionaryRepository>().To<DictionaryRepository>();
}
Run Code Online (Sandbox Code Playgroud)

并发现我的项目构建,但是当一个请求被发送到WebAPI项目时,它找不到(,我收到404响应).

所以显然还有其他一些必要的布线,而不是我的项目.

看来,尽管改变了我的global.asax来源NinjectHttpApplication,但global.asax不再被称为.

谁能告诉我我可能会失踪的是什么?我已经卸载并重新安装了几次NuGet包,但NinjectWebCommon该类从未出现过,我的global.asax文件也没有被修改过.

我还阅读了Ninject自己的文档,但令人沮丧的是这是一个相当大的教程,涵盖了IoC的基础知识以及Ninject如何运行而不是告诉你如何开始使用Ninject.

还有这篇SO帖子询问如何开始使用Ninject for WebAPI,所以看起来他们的NuGet包有些不对劲.

awj*_*awj 9

就像那样,我刚刚找到答案:还有一个必须引用的额外NuGet包:

Ninject.Web.WebApi.WebHost

安装"WebApi2的Ninject集成"包是不够的.

这应该更清楚地解释.