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包有些不对劲.
就像那样,我刚刚找到答案:还有一个必须引用的额外NuGet包:
Ninject.Web.WebApi.WebHost
安装"WebApi2的Ninject集成"包是不够的.
这应该更清楚地解释.