Где объявлены события жизненного цикла ASP. Net? (НЕ обработчики событий) - PullRequest
1 голос
/ 29 марта 2020

У меня есть приложение ASP. Net MVC. Внутри есть знаменитый Global.asax (я его не трогал):

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

Теперь люди говорят, что это событие, которое запускается при запуске приложения. Извините, но то, что я вижу здесь, не является событием - это метод. Я полагаю, что где-то происходит событие, которое запускается и указывает на этот МЕТОД (поэтому этот метод является обработчиком событий. Я ошибаюсь?)

Мой вопрос - где находится само событие? Я искал это во всем решении и не нашел это.

1 Ответ

0 голосов
/ 29 марта 2020

Ну а после получения стека трассировки приводит к вызову Application_Start, я обнаружил, что это было похоже на

at WebApplication1.MvcApplication.Application_Start() in C:\Users\Elite\source\repos\WebApplication2\WebApplication1\Global.asax.cs:line 16
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at System.Web.HttpApplication.InvokeMethodWithAssert(MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs)
   at System.Web.HttpApplication.ProcessSpecialRequest(HttpContext context, MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs, HttpSessionState session)
   at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
   at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
   at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
   at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

Эта ссылка содержит исходный код для всего этого,

private MethodInfo _onStartMethod; 

Возможно, вы заинтересованы в вышеуказанном поле, оно устанавливается в этом методе , если вы потратите пару минут с этим кодом, вы обнаружите, что MVC делает сканирует методы, существующие в файле global.ascx (который на самом деле является классом, наследующим класс HttpApplication), используя отражение курса

Также, если вы наблюдали трассировку стека, вы обнаружите вызов метода RegisterEventSubscriptionsWithIIS Я предполагаю, что это ответ на ваш вопрос: «Откуда происходят события?»

...