0

ASP.Net MVC3プロジェクトでNinject(3.0)を使用しています。リクエスト処理のある時点で、いくつかのタスクを実行したいと思います。

リクエストごとのセッションパターンを使用していますが、これらのタスクが現在のリクエストと同じセッションを共有することを望んでいません。だから、ChildKernelsがこの問題を解決するのに役立つと思いました。子カーネルでISessionの別のバインディングを作成しようとしましたが、それから始めました。

var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel);
child.Dispose();

リクエスト中にそのようなコードを実行すると、リクエストの最後にError loading Ninject component ICache例外が発生します(呼び出し時ではありません)。私がすべてを削除すれば大丈夫です。.Dispose()child.Dispose()

だから、私はChildKernelを使う正しい方法を選んでいますか?子カーネルを明示的に破棄せずに使用しても安全ですか?子カーネルを破棄した場合、なぜNinjectがリクエストの最後にスローするのですか?

4

1 に答える 1

3

拡張機能からすべてのモジュールを子カーネルにロードするため、例外がスローされます。LoadExtensions=false でカーネルを作成すると、この問題が解決します。しかし、これはあなたの場合の解決策ではありません。

ChildKernel の意図は、実際にはさまざまなスコープのためではありません。その子カーネルのタスク用にすべてを登録する必要があります。セッションだけでは不十分です。セッションに条件付きバインディングを追加することは、はるかに優れたオプションです。

于 2012-06-09T17:02:20.507 に答える