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

时间:2014-10-14 07:50:55

标签: c# asp.net-web-api dependency-injection ninject nuget

我通过软件包管理器控制台安装了NuGet软件包 Ninject Integration for WebApi2

根据wiki on the project's GitHub pages,这应该在App_Start文件夹中创建一个名为NinjectWebCommon的类。但它没有。

同样的GitHub维基页面解释了应该看到的内容,以便您自己添加。所以我尝试自己创建NinjectWebCommon课程。这里的问题是我无法在以下代码段中找到OnePerRequestModule的命名空间。

public static void Start()
{
    DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule));
    DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
    bootstrapper.Initialize(CreateKernel);
}

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

private void RegisterServices(IKernel kernel)
{
    kernel.Bind<IEntityAccess>().To<EntityAccess>();
    kernel.Bind<IDictionaryRepository>().To<DictionaryRepository>();
}

并发现我的项目已构建,但是当向WebAPI项目发送请求时,无法找到它(即。,我收到404响应)。

因此,在我的项目中,显然还有其他一些必要的连线。

看来,尽管我将global.asax更改为NinjectHttpApplication,但global.asax不再被调用。

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

我还阅读了Ninject's own documentation但令人沮丧的是,这是一本相当大的教程,涵盖了IoC的基础知识以及Ninject如何运作,而不是告诉你如何开始使用Ninject。

还有this SO post询问如何开始使用Ninject for WebAPI,所以看起来他们的NuGet包有点不对劲。

1 个答案:

答案 0 :(得分:9)

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

  

Ninject.Web.WebApi.WebHost

为WebApi2安装&#34; Ninject集成&#34;包装还不够。

这应该更清楚地解释。