3

我有一个正在处理的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而不是仅仅把它放在构造函数中?我在不知不觉中已经做到了这两种方式,并且从未遇到过任何问题。

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

4

1 回答 1

3

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

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

这是ASP.NET 应用程序生命周期页面的片段:

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

于 2012-10-12T18:05:30.910 回答