12

Ninject私は最近、この拡張機能を試してみNinject.Web.Mvcましたが、何かがおかしいことに気付きました。

抽象クラスには、NinjectHttpApplication次のように定義されたコンストラクターがあります。

    /// <summary>
    /// Initializes a new instance of the <see cref="NinjectHttpApplication"/> class.
    /// </summary>
    protected NinjectHttpApplication()
    {
        this.onePerRequestModule = new OnePerRequestModule();
        this.onePerRequestModule.Init(this);
    }

ここにデバッガーのブレークポイントを配置しました。これは数回呼び出されます。それに関する実際のドキュメントは見つかりません。実装コードで、私の目を引くこの行があります。

            if (kernel.Settings.Get("ReleaseScopeAtRequestEnd", true))
            {
                OnePerRequestModule.StartManaging(kernel);
            }

私の質問は次のとおりです...

  • とはOnePerRequestModule
  • このコンストラクターが複数回呼び出されるのはなぜですか?
  • StartManagingコンストラクターが複数回呼び出される場合、このメソッドの目的は何ですか?
4

1 に答える 1

13

は、各HTTPリクエストの完了時に、カーネルのキャッシュからdオブジェクトをOnePerRequestModule削除します。InRequestScope()

IISがそれらのいくつかを作成するため、NinjectHttpApplicationctorは複数回呼び出されます。一度に処理できるリクエストは1つNinjectHttpApplicationだけです。したがって、IISはスレッドごとに(少なくとも)1つのインスタンスを生成します。

StartManagingリクエストが終了した後、指定されたカーネルからオブジェクトOnePerRequestModulesを解放することをすべてに通知します。InRequestScoped

于 2011-02-17T09:27:17.000 に答える