当前位置 : 主页 > 网络编程 > ASP >

在ASP.NET中运行代码的绝对最早的地方的执行顺序

来源:互联网 收集:自由互联 发布时间:2021-06-24
有许多地方可以在ASP.NET中执行初始化代码: 处理web.config WebActivator PreApplicationStartMethod WebActivator PostApplicationStartMethod Global.asax Application_Start 这些事件的排序是什么?是否还有其他附加
有许多地方可以在ASP.NET中执行初始化代码:

>处理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.RegisterBuildProviderBuildManager.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标记的方法

网友评论