Asp.net-Mvc-3

Ninject 和 OnePerRequestModule

  • April 3, 2013

我最近嘗試了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如果建構子被多次呼叫,這個方法的目的是什麼?

在完成每個 HTTP 請求後,從核心的記憶體OnePerRequestModule中刪除InRequestScope()d 個對象。

NinjectHttpApplicationctor 被多次呼叫,因為 IIS 創建了其中的幾個。一次NinjectHttpApplication只能處理一個請求。因此 IIS 每個執行緒(至少)生成一個實例。

StartManaging告訴所有人,在請求結束後OnePerRequestModules,他們應從指定的核心中釋放對象。InRequestScoped

引用自:https://stackoverflow.com/questions/5018333