2011-05-18 158 views
5

我有一個基本的控制器ApplicationController需要抓取URL主機,並做一些處理孩子的控制器被解僱之前前被解僱。由於控制器構造函數在RequestContext初始化之前觸發,所以我必須重寫Initialize方法來執行我的處理。爲什麼控制器構造函數初始化方法

ApplicationController:

Protected Overrides Sub Initialize(ByVal requestContext As System.Web.Routing.RequestContext) 
     MyBase.Initialize(requestContext) 

     Dim host as String 
     host = Request.Url.Host.ToString 
    End Sub 

什麼是初始化方法之前使控制器構造火災背後的邏輯是什麼?

還有什麼是規則,什麼應該被放置在初始化方法。

回答

10

假設構造函數的第一個實例方法有史以來在.NET類被解僱,這不應該作爲一個驚喜,是不是真的東西MVC具體。它更多地是.NET框架的工作原理。

的MVC框架需要首先實例化一個控制器,然後初始化=>它首先調用構造。而且由於進行大量的代碼,可能會拋出異常,等等並不總是最好要放在Initialize方法的構造函數=>的存在。就這個方法而言,我必須承認我已經寫了大量的ASP.NET MVC代碼,並且從來不必使用它。行爲過濾器似乎是一個更好的選擇。

因此,要回答你的問題:

還有什麼是規則,什麼應該被放置在初始化方法。

我從來沒有放過任何代碼,永遠不需要重寫此方法。我一直喜歡使用動作過濾器,因爲這樣我不再需要從一個普通的基礎控制器派生出來(不是這是一個問題)。

+0

「我一直用行動過濾器首選,因爲這樣一來,我的義務不再從一個共同的基礎控制器」重本宣言所確定的,這裏有一對夫婦,我發現有用的資源:http://stackoverflow.com/a/6119341/206297 ; http://odetocode.com/Blogs/scott/archive/2010/06/28/action-filter-versus-controller-base-class.aspx – ngm 2012-10-24 10:19:40

-1

有時,也許你會希望你的請求初始化你的變量,所以在這種情況下,你應該使用初始化方法

例如,如果你想以不同的方式來初始化一些變量,當請求是本地的還是沒有等

相關問題