Asp.net-Mvc-3
Ninject 和 OnePerRequestModule
我最近嘗試了
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