2012-12-24 130 views
18

在MVC中,我只需使類NinjectControllerFactory實現DefaultControllerFactory接口,然後在其中進行一些綁定。最後在Global我運行它:如何在ASP.NET Web API中使用Ninject?

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 

但有關的ASP.NET Web API使用Ninject是什麼?網絡上有一些信息,但是過時和預發佈版本。

有沒有一個簡單的方法來解決這個問題?

回答

19

很多文章比較陳舊的原因是因爲這種方法自2012年6月以來一直沒有改變(RC於5月31日發佈)。你需要添加Ninject MVC3 Nuget包,然後實現'IDepenencyResolver'然後註冊你的實現。

兩個最好的步行幾點思考是:

  1. http://www.strathweb.com/2012/05/using-ninject-with-the-latest-asp-net-web-api-source/
  2. http://www.peterprovost.org/blog/2012/06/19/adding-ninject-to-web-api/
+1

它看起來像有兩個不同的NuGet包的更新:[Ninject.Web.WebApi](http://nuget.org/packages/Ninject .Web.WebApi/3.0.0.2)和[Ninject.Web.WebApi.Updated](http://nuget.org/packages/Ninject.Web.WebApi.Updated/)。 看來,第一個仍然處於預發佈版本。 –

+0

來自peterprovost文章的解決方案似乎打破了InSingletonScope綁定,實質上使每個http請求都成爲可能。 ninject中的'官方'webapi支持似乎遠不及生產,因此將轉向Auotfac,它似乎支持開箱即用的WebApi(以及更多):https://code.google.com/p/autofac/wiki/ WebApiIntegration – Dmitry

+0

我嘗試了第一種方法,它的效果非常好。 – liang

5

當前版本Ninject.Web.WebApi的,因爲至少3.2.1.0,不再需要什麼另外手動添加。像往常一樣,只需添加軟件包並在NinjectWebCommon.cs中註冊所有內容即可。

+2

您還需要遵循http://stackoverflow.com/questions/22768721/parameterless-constructor-error-with-ninject-bindings-in-net-web-api-2-1上的說明 – P6345uk

4

對於網絡API 2,你需要這些的NuGet包 -

Ninject 
Ninject.Web.Common 
Ninject.Web.WebApi 
Ninject.Web.Common.WebHost 
WebActivatorEx 

而且你需要編輯NinjectWebCommon.CreateKernel(..)包括

RegisterServices(kernel); 
GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 
return kernel; 

我在這裏寫了一個詳細的博客文章 - http://NoDogmaBlog.bryanhogan.net/2016/04/web-api-2-and-ninject-how-to-make-them-work-together/包括全解決方案下載。

1

以下步驟工作就像一個沙姆沙伊赫獲得Ninject工作的一個項目的WebAPI:

  1. 安裝Ninject.Web.WebApi NuGet包。
  2. 安裝Ninject.Web.WebApi.WebHost NuGet包。
  3. 在添加到App_Start文件夾的NinjectWebCommon文件的「RegisterServices」方法中註冊您的依賴項。就像這樣:

Private static void RegisterServices(IKernel kernel)
{

kernel.Bind <IFoo>().To <Foo>(); 

} 
相關問題