Я довольно долго искал ответ на этот вопрос, но не нашел его.
Я буду называть запуск приложения этапом.
В большинстве документов говоритсяо файле Global.asax и методе Application_Start, который вызывается только один раз, когда первый запрос достигает приложения, даже если это поведение похоже на подписку на событие, оно технически не событие.
Хотя события жизненного цикла такиепоскольку BeginRequest, AuthenticateRequest и т. д. доступны через экземпляр приложения как события, Application.Start - нет.
Я могу подписаться на событие BeginRequest в методе HttpModule.Init () или Global.asax Init ()метод, но не до этапа Application.Start, например:
Модуль
public class MyModule : IHttpModule
{
public void Init(HttpApplication httpApplication)
{
httpApplication.BeginRequest += new EventHandler(ApplicationBeginRequest);
}
}
Global
public class Global : HttpApplication
{
public override void Init()
{
BeginRequest += new EventHandler(ApplicationBeginRequest);
}
}
После перехода к исходному коду .NET я обнаружил, что класс HttpApplicationFactory ищет метод с именем «Application_OnStart» или «Application_Start "в файле Global.asax и затем вызывает его, используя отражение => ReflectOnMethodInfoIfItLooksLikeEventHandler ().
Мой вопрос:
Начиная с HttpApplication.Запуск не является событием и недоступен из экземпляра приложения в других модах. Являются ли Global.asax и методы Application_OnStart или Application_Start единственной надеждой добавить код на этом аппликативном уровне?