>处理web.config
> WebActivator PreApplicationStartMethod
> WebActivator PostApplicationStartMethod
> Global.asax Application_Start
这些事件的排序是什么?是否还有其他附加项目应该列入此列表?
编辑:由于有人提到静态与第一个调用位置相关,我将为它们打破这个问题
WebActivator PreApplicationStartMethod中使用的Foo类
>静态构造函数
>静态只读字段
WebActivator PostApplicationStartMethod中使用的Bar类
>静态构造函数
>静态只读字段
在Global.asax Application_Start中使用的Baz类
>静态构造函数
>静态只读字段
为清楚起见,假设在上面的例子中,每个例子都依赖于在该位置使用的Foo / Bar / Baz类,并且该类包含静态构造函数和静态只读字段.
静态构造函数和静态字段初始化由运行时确定,而不是ASP.NET. Eric Lippert最近发布了一篇精彩的 four– part blog series,详细介绍了它们的工作原理.至于你提到的其他项目,首先执行标有System.Web.PreApplicationStartMethodAttribute
的方法.根据此属性的MSDN文档,无法保证调用这些方法的顺序.
根据Phil Haack的a blog post,该属性使开发人员有机会在应用程序启动期间调用另外两种方法:BuildProvider.RegisterBuildProvider
和BuildManager.AddReferencedAssembly
. BuildManager.AddReferenceAssembly的MSDN文档声明此方法只能在应用程序的Application_PreStartInit阶段执行,这表明当执行System.Web.PreApplicationStartMethodAttribute标记的所有方法时.
WebActivator使用框架的PreApplicationStartMethodAttribute挂钩到应用程序的启动.一旦被调用,它将搜索并执行WebActivator.PreApplicationStartMethodAttribute标记的所有方法,然后动态注册an HttpModule,稍后将调用PostApplicationStartMethodAttribute标记的所有方法 – 在HttpApplication类中调用Application_Start之后.
总而言之,订单是:
> Web.config被读入内存>使用PreApplicationStartMethodAttribute标记的方法> HttpApplication.Application_Start>使用WebActivator.PostApplicationStartMethodAttribute标记的方法