2012-12-05 63 views
6

我最近在現有的ASP.NET MVC 4 Web應用程序中添加了Ninject和Ninject.Web.Mvc。當你瀏覽網站,我收到下面的異常,看似隨意:隨機發生Ninject異常:「加載Ninject組件ICache時出錯」

[出現InvalidOperationException:錯誤加載Ninject組件ICACHE沒有 這樣的組件已註冊在內核中的組件 容器。

建議:1)如果您已爲 KernelBase創建了自定義子類,請確保您已正確執行AddComponents()方法的 。 2)確保您沒有通過致電 RemoveAll()從容器中取出組件。 3)確保你沒有意外創建一個內核以上的內存。 ] Ninject.Components.ComponentContainer.Get(類型 成分) C:\項目\ Ninject \ ninject \ SRC \ Ninject \組件\ ComponentContainer.cs:160 Ninject.Components.ComponentContainer.Get()在 C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs:116 Ninject.Web.Common。 <> c__DisplayClass2.b__1(IKernel kernel)in c:\ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs:74 Ninject.GlobalKernelRegistration.MapKernels(Action`1 action)in C:\項目\ ninject \ ninject \ SRC \ ninject \ GlobalKernelRegistration.cs:75 Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest()在 ç :\項目\ ninject \ Ninject.Web.Common \ SRC \ ninject .Web.Common \ OnePerRequestHttpModule.cs:74 Ninject.Web.Common.OnePerRequestHttpModule.b__0(Object o, EventArgs e)in c:\ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs:56 System.Web.SyncEventExecutionStep.Syst em.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep一步,布爾& completedSynchronously)+69

一旦我收到上述異常,只需刷新或點擊回似乎導致網站再次正常開始運作。該網站的任何一個區域似乎都不會導致其發生。

該問題與此處詢問的問題非常相似:Ninject + "Error loading Ninject component ICache"。然而,這個問題的問題似乎是由於擴展本身的錯誤造成的,已經有一年多了,而且看起來已經解決了。

這發生在沒有任何修改NinjectWebCommon.cs文件,無論如何。 (沒有加載模塊,也沒有添加任何綁定。)讓我停止的唯一方法是從項目中排除NinjectWebCommon.cs

我不確定要包含哪些其他信息,因爲我除了安裝Nuget軟件包外幾乎沒有做任何其他的事情。也許值得注意的是,這個項目確實包含了對使用Ninject for DI的其他程序集的引用。

我環顧四周,爲什麼會出現這種情況。任何建議將不勝感激。

+0

當在MVC應用程序中使用啓用Ninject的WebActivator和基於Global.asax.cs的方法時,會發生這種情況。 – UnhipGlint

回答

4

很明顯,您的應用程序中包含多個內核(MVC + Libs)。在應用程序的運行時期間創建和部署內核實例是應該避免的。我強烈建議改變你的設計,以便在應用程序啓動時創建少量的內核。而且以後都不會創建(包括所有的庫)。儘管如此,我並沒有在代碼中看到任何方式如何在最新版本的Ninject中發生這種問題。可能值得驗證的是,應用程序和所有庫都在最新版本的Ninject上。

+0

我認爲我們將嘗試重構代碼以消除使用Ninject引用庫的需求。我會看看有什麼影響,並驗證版本號。 – UnhipGlint

+0

使用Ninject刪除對外部程序集的引用後,問題似乎消失了。希望清除它,感謝您的幫助! – UnhipGlint