我知道有幾個問題有點像這一個,但由於我無法找到任何文檔,並沒有任何其他問題有任何幫助我的答案,在這裏:使用最新的MVC 5/Web Api 2獲取最新的Ninject?
我創建一個新的ASP。 NET應用程序(VS2013),選擇MVC,我添加API。我在Package Console中運行「update-package」以更新到最新版本(MVC 5.1.2,Web Api 5.1.2)。
然後我添加新的Ninject.MVC5和Ninject.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文件I添加的單一結合:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
然後我添加一個ApiController,ILogger作爲構造函數中的單個參數,並且將ILogger作爲參數添加到HomeController的構造函數中。
這應該是測試?
我錯過了WebApi的一些接線?或者這是否發生在幕後?
反正acessing的API控制器給了我這個錯誤:
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,但..
任何幫助appriciated!
這就是當你與Ninject合作多年時發生的情況,但是在兩者之間有一個抽象!萬分感謝!只是爲了澄清,你的意思是「註冊一次ILogger」是我註冊一次,然後它對MVC和WebApi都有效?至少,似乎發生了什麼。 –
@Remo Gloor:你的答案有語法錯誤。請在'kernel.Bind'之後添加'()'。所以完整的答案代碼將是:'kernel.Bind ()。到();'。我厭倦了改進這個答案,但顯然評論傢伙沒有發現任何有用的糾正語法錯誤! –