gpt4 book ai didi

asp.net - 在 ASP.NET 中运行代码的绝对最早位置的执行顺序

转载 作者:行者123 更新时间:2023-12-01 07:27:46 25 4
gpt4 key购买 nike

在 ASP.NET 中有很多地方可以执行初始化代码:

  • web.config 已处理
  • 网络激活器 PreApplicationStartMethod
  • 网络激活器 PostApplicationStartMethod
  • Global.asax Application_Start

  • 这些事件的顺序是什么?此列表中是否还有其他任何其他项目?

    编辑:由于提到静态与第一次调用位置相关,我将为他们分解

    WebActivator 中使用的 Foo 类 PreApplicationStartMethod
  • 静态构造函数
  • 静态只读字段

  • WebActivator 中使用的 Bar 类 PostApplicationStartMethod
  • 静态构造函数
  • 静态只读字段

  • Global.asax 中使用的 Baz 类 Application_Start
  • 静态构造函数
  • 静态只读字段

  • 为清楚起见,假设在上面的示例中,每个示例都依赖于在该位置使用的 Foo/Bar/Baz 类,并且该类包含一个静态构造函数和静态只读字段。

    最佳答案

    静态构造函数和静态字段初始化是由运行时决定的,而不是 ASP.NET。 Eric Lippert 最近发布了一个很棒的 four - part blog series详细说明它们是如何工作的。

    至于你提到的其余项目,用 System.Web.PreApplicationStartMethodAttribute 标记的方法被首先执行。根据此属性的 MSDN 文档,无法保证调用这些方法的顺序。

    根据a blog post由 Phil Haack 编写,此属性使开发人员有机会在应用程序启动期间调用另外两个方法: BuildProvider.RegisterBuildProvider BuildManager.AddReferencedAssembly . BuildManager.AddReferenceAssembly 的 MSDN 文档声明此方法只能在应用程序的 Application_PreStartInit 阶段执行,这表明所有方法都由 System.Web.PreApplicationStartMethodAttribute 标记。被执行。

    WebActivator 使用框架的PreApplicationStartMethodAttribute Hook 到应用程序的启动。一旦调用,它将搜索并执行所有由 WebActivator.PreApplicationStartMethodAttribute 标记的方法。在它动态注册之前 an HttpModule稍后将调用由 PostApplicationStartMethodAttribute 标记的所有方法- 在 HttpApplication 类中调用 Application_Start 之后。

    所以,总而言之,顺序是:

  • Web.config 被读入内存
  • 标有 PreApplicationStartMethodAttribute 的方法
  • HttpApplication.Application_Start
  • 标有 WebActivator.PostApplicationStartMethodAttribute 的方法
  • 关于asp.net - 在 ASP.NET 中运行代码的绝对最早位置的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986886/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com