我正在開發我的MVC應用程序,我在想,控制器類的生命週期是什麼?什麼是ASP.NET MVC控制器的生命週期?
它什麼時候被創建?單個控制器有多少個實例?局部變量的含義是什麼?什麼時候銷燬?
我確定有一個很好的鏈接在互聯網上浮動,但我的google-fu找不到它。
我正在開發我的MVC應用程序,我在想,控制器類的生命週期是什麼?什麼是ASP.NET MVC控制器的生命週期?
它什麼時候被創建?單個控制器有多少個實例?局部變量的含義是什麼?什麼時候銷燬?
我確定有一個很好的鏈接在互聯網上浮動,但我的google-fu找不到它。
Stephen Walther在MVC框架處理請求的生命週期中擁有很棒的article。
下面是從他的文章的頂部提取物,它接着詳細介紹了每個步驟:
生命週期的步驟概述
有這種情況發生,當你五個主要步驟使從ASP.NET MVC網站的請求:
1. RouteTable創建
當ASP.NET應用程序第一次啓動時,第一步只發生一次。 RouteTable將URL映射到處理程序。
2. UrlRoutingModule截獲請求
這第二個步驟內,只要您撥打一個請求。 UrlRoutingModule攔截每個請求並創建並執行正確的處理程序。
3. MvcHandler執行
的MvcHandler創建的控制器,通過所述控制器的ControllerContext,並執行控制器。
4.控制器執行
控制器確定要執行哪個控制器的方法,建立的參數的列表,並且執行該方法。
5.的RenderView方法稱爲
典型地,控制器方法調用的RenderView()來呈現內容返回給瀏覽器。該Controller.RenderView()方法委託其對特定視圖引擎
Stephen Walther的文章鏈接無效了! – Hamed 2017-02-23 15:17:47
這很難描述控制器的「壽命」。假設我想在創建控制器時啓動事務,執行零個或多個操作,然後將這些操作作爲一個單元提交。控制器是否被銷燬?何時可以在某個操作出現問題時隱式調用「回滾」方法? – 2017-07-20 00:41:31
工作假設你沒有更改默認ControllerFactory
,控制器會爲每個請求被創建和被收集的請求已完成「一段時間後」垃圾。
總之,你不需要擔心實例變量的競爭條件(儘管你對靜態變量顯然是這樣)。話雖如此,我建議爲了更簡潔的代碼保持您的控制器動作可重入。
Steve Sanderson製作了一張描繪MVC [請求處理管道](http://blog.stevensanderson。com/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipeline-poster /),你可能會感興趣。 – 2010-03-01 11:13:10