Как обрабатывать событие Application_End извне global.asax - PullRequest
1 голос
/ 24 мая 2011

Мы можем присоединиться к этому событию из метода создания файла global.asax с именем Application_End ().Но мне нужно прикрепить к нему вот так

HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;

Есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 27 мая 2011

Решил проблему таким образом.

    public class MyHttpApplication:HttpApplication
    {
        public event Action ApplicationEnd;
        protected void Application_End()
        {
            if (ApplicationEnd != null)
               ApplicationEnd();
        } 
    }

В global.asax определено

<%@ Application Inherits="MyLib.MyHttpApplication" Language="C#" %>

Тогда в коде

var app = HttpContext.ApplicationInstance as MyHttpApplication;
app.ApplicationEnd += () => { // do something };
3 голосов
/ 24 мая 2011

Application_End - это специальное «событие», которое вызывается Asp.net и не передается в класс HttpApplication.

из MSDN * Методы Application_Start и Application_End - это специальные методы, которые не представляют события HttpApplication. ASP.NET вызывает их один раз за время существования домена приложения, а не для каждого экземпляра HttpApplication. *

Я думаю, что вы можете иметь такое же поведение при подключении и обработчике к событию AppDomain.DomainUnload

//your global.asax class contrauctor
public GlobalApplication()
        {

            AppDomain.CurrentDomain.DomainUnload += ApplicationEnd;
        }


        private void ApplicationEnd(object sender, EventArgs e)
        {

        }
1 голос
/ 16 января 2017

Я знаю, что ответ уже дан, но хотел бы также включить этот способ:

[assembly: PreApplicationStartMethod(typeof(Bootstraper), "Start")]
[assembly: ApplicationShutdownMethod(typeof(Bootstraper), "End")]
public static class Bootstraper
{
    public static void End()
    {
        ...
    }
    public static void Start()
    {
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...