我找了很久都没有找到答案。
我将Application start称为一个阶段。
大多数的文档都在谈论Global.asax文件和Application_Start方法,当第一个请求到达Application时,该方法只被调用一次,即使这种行为类似于订阅一个事件,在技术上也不是一个事件。
虽然BeginRequest、AuthenticateRequest等生命周期事件可以通过应用实例作为事件访问,但Application.Start却不是。
我可以在HttpModule.Init()方法或Global.asax Init()方法中订阅BeginRequest事件,但不能像这样在Application.Start阶段订阅。
模块
public class MyModule : IHttpModule
{
public void Init(HttpApplication httpApplication)
{
httpApplication.BeginRequest += new EventHandler(ApplicationBeginRequest);
}
}
全球
public class Global : HttpApplication
{
public override void Init()
{
BeginRequest += new EventHandler(ApplicationBeginRequest);
}
}
我的问题是:由于没有从Application实例中访问HttpApplication.Start事件,Global.asax和 "Application_Start "方法是否是Application启动阶段的唯一希望?
由于没有从Application实例中访问HttpApplication.Start事件,Global.asax和 "Application_Start "方法是否是订阅Application启动阶段的唯一希望?
在跳转到.NET源码后,我发现HttpApplicationFactory类中有一个方法叫作 应用程序_OnStart 或 应用程序_启动 在Global.asax文件中,然后使用reflection => ReflectOnMethodInfoIfItLooksLikeEventHandler()来调用它。
我没有答案,为什么HttpApplication.Start不是事件,但它显然是要以类似事件的方式处理,使用的是 应用程序_OnStart 或 应用程序_启动 方法;