我已经很长一段时间都在寻找答案了,但没有找到答案。
我将应用程序启动称为一个阶段。
大多数文档都讨论了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);
}
}
跳转到.NET源代码后,我发现HttpApplicationFactory类在Global.asax文件中寻找一个名为“ Application_OnStart”或“ Application_Start”的方法,然后使用反射=> ReflectOnMethodInfoIfItLooksLikeEventHandler()调用它。
我的问题:
由于HttpApplication.Start不是事件,并且无法以其他方式从Application实例访问,因此Global.asax和“ Application_OnStart”或“ Application_Start”方法是在此应用级别添加代码的唯一希望吗?
答案 0 :(得分:0)
跳转到.NET源代码后,我发现HttpApplicationFactory类正在寻找名为 Application_OnStart 或 Application_Start < / strong>,然后使用Reflection => ReflectOnMethodInfoIfItLooksLikeEventHandler()调用它。
我没有答案,为什么HttpApplication.Start不是事件,但显然打算使用 Application_OnStart 或 < em> Application_Start 方法。