ASP.NET 4.0新增的初始化方法

  为了让一些类库能自动执行一些初始化,ASP.NET提供了一种新方法,允许为程序集指定一个PreApplicationStartMethodAttribute

  为了演示这种用法,我将前面的示例(VS2008开发)移到一个类库中(用VS2012开发)并设置类库的命名空间为InitClassLibrary1。

  然后,我添加了一个调用类:

    namespace InitClassLibrary1 
    { 
        public class Class1 
        { 
            public static void InitApp() 
            { 
                AppInitializer.Init(); 
            } 
        } 
    }

  后,我们可以在InitClassLibrary1类库的AssemblyInfo.cs文件中,增加一个Attribute

    [assembly: System.Web.PreApplicationStartMethod( 
                    typeof(InitClassLibrary1.Class1), "InitApp")]

  当然了,你也可以直接像下面设置,免得多创建一个类型出来:

    [assembly: System.Web.PreApplicationStartMethod( 
                    typeof(InitClassLibrary1.AppInitializer), "Init")]

  这样设置后,再运行网站,你也能发现我们的初始化代码确实运行了:黄页仍然在显示。

  各种初始化方法的差别

  前面介绍了4种在ASP.NET执行初始化的方法,你或许想知道它们到底有哪些区别呢?

  由于它们都能实现初始化的操作,它们的差别也只有执行的时刻不同而已,我们可以用简单的方法区分它们的调用位置:看异常的调用堆栈信息。

  AppInitialize方法异常时的调用堆栈信息:

  HttpModule异常时的调用堆栈信息: