2012-10-12 24 views
3

我有一個ASP.NET MVC 4.0項目,我的工作,我注意到,在默認情況下,該global.asax文件看起來像這樣...使用Application_Start over HttpApplication構造函數?

namespace Application1.Web { 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 
    public class MvcApplication : System.Web.HttpApplication { 
     protected void Application_Start() { 
      AreaRegistration.RegisterAllAreas(); 

      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
    } 
} 

是否有任何具體的原因,我想用Application_Start,而不是隻是把這個在構造函數中?我已經在不知不覺中完成了這兩種方式,並且從未遇到任何問題。

這個問題不是爲了解決問題,而是爲了獲得我缺乏的信息。如果它是多餘的,我很抱歉。

回答

3

其他人可能能夠提供更深入的答案,但是,某些方法(如Begin_Request)將按請求執行。 Session_Start將在每個用戶會話開始時執行。

但是,Application_Start只執行一次,因此它是線程安全的。如果要將這些調用移動到構造函數,那麼將針對每個請求執行這些方法,因爲該對象將針對每個請求進行實例化。

下面是從ASP.NET Application Lifecycle page片段:

所有核心應用程序對象已被初始化後,應用程序是通過創建HttpApplication類的實例啓動。 如果應用程序具有Global.asax文件,則ASP.NET會創建一個從HttpApplication類派生的Global.asax類的實例,並使用派生類來表示應用程序

+0

謝謝!這很好地澄清了它。我非常感謝。 – Ciel

相關問題