Магические функции Global.asax
При создании проекта ASP.NET Mvc в Visual Studio создаются Global.asax
и Global.asax.cs
. В этом файле .cs вы найдете стандартный метод Application_Start
.
Мой вопрос в следующем: как называется эта функция? потому что это не переопределение. Поэтому я предполагаю, что это имя метода по соглашению. То же самое относится к методу Application_Error
.
Я хочу знать, где эти методы подключены. Поскольку я пишу эти методы (не переопределяя их), я не мог найти в них какую-либо документацию в MSDN. (Я нашел эту страницу, но он только говорит вам подключиться к событию Error
и показывает Application_Error(object sender, EventArgs e)
, но не связан с тем, как связаны событие и метод.)
//Magicly called at startup
protected void Application_Start()
{
//Omitted
}
//Magicly linked with the Error event
protected void Application_Error(object sender, EventArgs e)
{
//Omitted
}
Ответы
Ответ 1
На самом деле это не волшебство. ASP.NET Pipeline прокладывает все это.
Вы можете посмотреть документацию, касающуюся этого здесь.
В частности, вас будут интересовать следующие детали:
Объекту HttpApplication
присваивается запрос.
Состоит из списка событий, которые запускаются и в каком порядке.
На этой странице есть ссылки (слишком много, чтобы содержать здесь), которые ссылаются на другие страницы с еще большей информацией.
ASP.NET автоматически связывает события приложения с обработчиками в Файл Global.asax с использованием соглашения об именах Application_event, такого как Application_BeginRequest
. Это похоже на то, как ASP.NET методы страницы автоматически привязаны к событиям, таким как страница Page_Load
событие.
Источник: http://msdn.microsoft.com/en-us/library/ms178473.aspx
Ответ 2
сам ASP.Net создает. Вот поток по MSDN -
- Пользователь запрашивает ресурс приложения с веб-сервера.
- ASP.NET получает первый запрос для приложения.
- Основные объекты ASP.NET создаются для каждого запроса.
- Объекту HttpApplication присваивается запрос. На этом этапе Global.asax будет обработан, и события будут связаны автоматически.
- Запрос обрабатывается конвейером HttpApplication. На этом этапе возникают события HttpApplication Global.
Вот ссылка - жизненный цикл приложения ASP.Net.
Из ссылки - ASP.NET автоматически связывает события приложения с обработчиками в файле Global.asax, используя соглашение о присвоении имен Application_event, такое как Application_BeginRequest.
Ответ 3
Чтобы демистифицировать "магию" принятого ответа, конвейер ASP.Net автоматически привязывает события HttpApplication
к методам с Application_EventName
в классе. Если (так же, как и я) вы предпочли бы видеть события, явно связанные с обработчиком, они могут быть связаны переопределением HttpApplication.Init()
, а Visual Studio будет генерировать метод обработчика с правильной сигнатурой.
public override void Init()
{
this.BeginRequest += MvcAppliction_BeginRequest;
}
private void MvcApplication_BeginRequest(object sender, EventArgs e)
{
...
}
Существует пример этого метода привязки событий