2012-12-05 7 views
6

最近、NinjectとNinject.Web.Mvcの両方を既存のASP.NET MVC 4 Webアプリケーションに追加しました。サイトを閲覧するとき、私は、一見ランダムに、次の例外を受け取る:ランダムに発生するNinject例外: "NinjectコンポーネントICacheの読み込みエラー"

[InvalidOperationExceptionが:エラーロードNinjectコンポーネント命令キャッシュはありません 、このようなコンポーネントは、カーネルの構成要素 コンテナに登録されています。

提案:1) KernelBaseのカスタムサブクラスを作成した場合は、適切に がAddComponents()メソッドを実装していることを確認してください。 2) RemoveAll()への呼び出しによってコンテナからコンポーネントを削除していないことを確認します。 3)誤って1つのカーネルを 以上作成していないことを確認してください。 ] c:\ Projects \ Ninject \ nInject \ src \ Ninject \ Components \ ComponentContainer.cs:160 Ninject.Components.ComponentContainer.Get( コンポーネント) のC:\ Ninject.Components.ComponentContainer.Get() Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs:116 Ninject.Web.Common。 > のc__DisplayClass2.b__1(IKernelカーネル)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() はC:\プロジェクト\ ninject \ Ninject.Web.Common \ SRC \ ninject .Web.Common \ OnePerRequestHttpModule.cs:74 Ninject.Web.Common.OnePerRequestHttpModule.b__0(Object o、 EventArgs e) の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"。しかし、その問題は、拡張機能自体のバグが原因で、1年以上経過していると思われ、解決されているように見えます。

これは、NinjectWebCommon.csファイルに何も変更することなく発生します。 (モジュールがロードされず、バインディングも追加されていません)私が停止させる唯一の方法は、NinjectWebCommon.csをプロジェクトから除外することです。

Nugetパッケージをインストールする以外の方法はほとんどありません。おそらく注目すべき点は、このプロジェクトには、Ninject for DIを使用する他のアセンブリへの参照が含まれていることです。

私はかなり見渡してきましたが、なぜこれが起こるのかが分かりません。どんな提案も大歓迎です。

+0

これは、MVAアプリケーションでNinjectを有効にするWebActivatorおよびGlobal.asax.csベースの方法のいずれかを使用する場合に発生します。 – UnhipGlint

答えて

4

アプリケーションに複数のカーネルが含まれていることは明らかです(MVC + Libs)。アプリケーションの実行時にカーネル・インスタンスを作成して廃棄することは、避けなければならないことです。私はあなたのデザインを変更して、アプリケーションの開始時にカーネルが少なくなるようにすることを強くお勧めします。そして、後で作成されるものはありません(すべてのライブラリを含む)。

Ninjectの最新バージョンでこの問題がどのように起こるかについては、コード内には何も表示されません。アプリケーションとすべてのライブラリがNinjectの最新バージョンにあることを確認する価値があります。

+0

私は、Ninjectを使ってライブラリを参照する必要性を排除するためにコードを少しリファクタリングしようと考えています。どのような効果があるかを見て、バージョン番号を確認します。 – UnhipGlint

+0

Ninjectを使用して外部アセンブリへの参照を削除した後、問題が解決したようです。うまくいけば、あなたの助けを借りて、それをクリアします! – UnhipGlint

関連する問題