最近、Ninject と Ninject.Web.Mvc の両方を既存の ASP.NET MVC 4 Web アプリケーションに追加しました。サイトを閲覧すると、ランダムに見える次の例外が表示されます。
[InvalidOperationException: Ninject コンポーネント ICache の読み込み中にエラーが発生しました カーネルのコンポーネント コンテナーにそのようなコンポーネントが登録されていません。
提案: 1) KernelBase のカスタム サブクラスを作成した場合は、AddComponents() メソッドを適切に実装していることを確認してください。2) RemoveAll() の呼び出しによってコンテナからコンポーネントを削除していないことを確認してください。3) 誤って複数のカーネルを作成していないことを確認してください。] Ninject.Components.ComponentContainer.Get(コンポーネントの型) in c:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs:160 Ninject.Components.ComponentContainer.Get() in c:\Projects\Ninject\ ninject\src\Ninject\Components\ComponentContainer.cs:116 Ninject.Web.Common.<>c__DisplayClass2.b__1(IKernel カーネル) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\ OnePerRequestHttpModule.cs:74 C の Ninject.GlobalKernelRegistration.MapKernels(Action`1 アクション):
上記の例外を受け取ったら、更新するかクリックして戻るだけで、サイトが正常に機能し始めるようです。サイトのどの領域も、別の領域よりもそれを発生させるようには見えません.
この問題は、次の質問とよく似ています: Ninject + "Error loading Ninject component ICache" . ただし、その質問の問題は、拡張機能自体のバグが原因のようで、1 年以上経過しており、解決されているようです。
これは、 NinjectWebCommon.csファイルをまったく変更しなくても発生します。(モジュールはロードされておらず、バインディングも追加されていません。) それを停止させる唯一の方法は、プロジェクトからNinjectWebCommon.csを完全に除外することです。
Nuget パッケージをインストールする以外はほとんど行っていないため、他にどのような情報を含めればよいかわかりません。おそらく注目に値するのは、このプロジェクトには、DI に Ninject を利用する他のアセンブリへの参照が含まれていることです。
私はかなり見回しましたが、なぜこれが起こるのか途方に暮れています。どんな提案でも大歓迎です。