Я нахожусь в процессе добавления ASP.NET кодекс MVC к существующему ранее проекту Веб-форм ASP.NET. Различные обучающие программы предлагают добавить направление к методу, названному от Application_Start () в Global.asax. У моего Global.asax уже есть Application_OnStart (Объект, EventArgs) метод с некоторым кодексом установки.
Если я пытаюсь иметь и Начало и OnStart, OnStart не становится названным (и установка терпит неудачу, вызывая ошибки). Похоже, что я должен выбрать один или другой.
Мой вопрос: какой я должен использовать? Каково различие между ними? Их называют в разное время?
(Примечание: во время этого письма наверхтриGoogleхиты бесполезные и/или вводящие в заблуждение. Я надеюсь, что Переполнение Стека может зафиксировать это.)
В классическом (устаревшем) ASP есть несколько специальных имен функций, которые, если они определены в вашем файле Global.Asa, будут запущены в указанных точках во время жизненного цикла приложения. Они определены как:
Это в основном в основном подключены к классическому время выполнения ASP - вы не можете их изменить, и вы не можете прикрепить никаких других методов этих событий.
В ASP.NET есть вещь, называемая AUTOEVENTWIREUP
, которое использует отражение для поиска методов, соответствующих определенным конвенциям именования, и выполняет эти методы в ответ на соответствующие события, поднятые в выполнении ASP.NET. Наиболее распространенным примером является метод Page_load
, который автоматически вызывается в ответ на класс Page Page Page The Load Event нагрузка на жизненном цикле страницы.
Та же методика используется для прикрепления обработчиков к событиям жизненного цикла на уровне нанесения. Он будет искать методы с именем либо ModuleName_eventname или ModuleName_OneVentname, принимая либо нет параметров ()
, либо (объект отправителя, eventArgs e)
вот веселая часть - , если вы определите больше, чем Один метод соответствия, только тот, который появляется последним в файле, выполнит . (Последний метод выигрывает, в основном)
, так что если ваш Global.Asax.cs выглядит так:
public class Global : System.Web.HttpApplication {
protected void Application_Start() {
Debug.WriteLine("A: Application_Start()");
}
protected void Application_Start(object sender, EventArgs e) {
Debug.WriteLine("B: Application_Start(object sender, EventArgs e)");
}
protected void Application_OnStart() {
Debug.WriteLine("C: Application_OnStart()");
}
protected void Application_OnStart(object sender, EventArgs e) {
Debug.WriteLine("D: Application_OnStart(object sender, EventArgs e)");
}
}
вы увидите сообщение D в вашем выходе отладки; Если вы прокомментируете последний метод в этом блоке, вы увидите сообщение C вместо этого.
Итак - используйте в зависимости от того, какое значение именования вам нравится, но если вы определяете более одного, только тот, который появляется последним в вашем исходном файле, будет выполняться. Я бы лично придерживался Application_Start (отправитель объекта, Eventargs e)
, поскольку это подпись, генерируемая шаблонами проекта Visual Studio и большинством .NET Design / Coding Tools.
Функция Application_OnStart вызывается до обработки файлов .asp, прежде чем любой текст или графики отображаются и отправлены в браузер пользователя. В этой функции следующий вызов метода CreateObject на объекте сервера Active Server Pages Breate Pages создает объект рендеринга рендеринга CDO. Если этот вызов преуспевает, переменная ObjrenderApp содержит указатель на новый объект.
Все ссылки, которые я смог найти, обратитесь к страницам .asp
Методы Application_Start и Application_end являются специальными методами, которые не представляют события httpapplation. ASP.NET вызывает их один раз в течение срока службы домена приложения, а не для каждого экземпляра httpapplication.
Эта страница относится к страницам .aspx. Так как вы используете MVC и упомяните Global.Asax Это тот, который вы должны использовать.
Согласно документам Microsoft о жизненном цикле приложений ASP.Net , вы должны использовать метод Application_start внутри файла global.asax:
Application_Start: Вызывается, когда запрашивается первый ресурс (например, страница) в ASP.NET приложении. Метод Application_Start вызывается только один раз в течение жизненного цикла приложения. Этот метод можно использовать для выполнения таких задач запуска, как загрузка данных в кэш и инициализация статических значений.
Application_OnStart: Событие Application_OnStart происходит до создания первого нового сеанса (когда на объект Application впервые ссылаются). Это происходит в Global.asa , а не в Global.asax.