2010-03-01 80 views
59

我正在開發我的MVC應用程序,我在想,控制器類的生命週期是什麼?什麼是ASP.NET MVC控制器的生命週期?

它什麼時候被創建?單個控制器有多少個實例?局部變量的含義是什麼?什麼時候銷燬?

我確定有一個很好的鏈接在互聯網上浮動,但我的google-fu找不到它。

+0

Steve Sanderson製作了一張描繪MVC [請求處理管道](http://blog.stevensanderson。com/2009/10/08/aspnet-mvc-learning-resource-request-handling-pipeline-poster /),你可能會感興趣。 – 2010-03-01 11:13:10

回答

44

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()方法委託其對特定視圖引擎

+0

Stephen Walther的文章鏈接無效了! – Hamed 2017-02-23 15:17:47

+1

這很難描述控制器的「壽命」。假設我想在創建控制器時啓動事務,執行零個或多個操作,然後將這些操作作爲一個單元提交。控制器是否被銷燬?何時可以在某個操作出現問題時隱式調用「回滾」方法? – 2017-07-20 00:41:31

16

工作假設你沒有更改默認ControllerFactory,控制器會爲每個請求被創建和被收集的請求已完成「一段時間後」垃圾。

總之,你不需要擔心實例變量的競爭條件(儘管你對靜態變量顯然是這樣)。話雖如此,我建議爲了更簡潔的代碼保持您的控制器動作可重入。