在HttpApplication构造函数上使用Application_Start?

时间:2012-10-12 17:55:39

标签: asp.net-mvc

我正在处理一个ASP.NET MVC 4.0项目,我注意到默认情况下global.asax文件看起来像这样......

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而不是仅仅将其放在构造函数中?我已经在不知不觉中做到了这两种方式,从未遇到任何问题。

这个问题不是为了解决问题,而是为了获取我缺乏的信息。如果它是多余的,我道歉。

1 个答案:

答案 0 :(得分:3)

其他人可能能够提供更深入的答案,但是,每个请求都会执行一些方法,例如Begin_RequestSession_Start将在每个用户会话开始时执行。

但是,Application_Start只执行一次,因此它是线程安全的。如果要将这些调用移动到构造函数,那么将为每个请求执行这些方法,因为该对象将针对每个请求进行实例化。

以下是ASP.NET Application Lifecycle page

的摘录
  

在初始化所有核心应用程序对象之后,通过创建HttpApplication类的实例来启动应用程序。 如果应用程序具有Global.asax文件,则ASP.NET会创建一个Global.asax类的实例,该实例派生自HttpApplication类,并使用派生类来表示应用程序