2011-05-18 86 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

有时,也许你会希望你的请求初始化你的变量,所以在这种情况下,你应该使用初始化方法

例如,如果你想以不同的方式来初始化一些变量,当请求是本地的还是没有等