如何处理来自global.asax外部的Application_End事件

本文关键字:外部 asax Application 事件 End global 何处理 处理 | 更新日期: 2023-09-27 17:57:44

我们可以从名为Application_End()的global.asax文件创建方法附加到此事件。但我需要像这个一样附在上面

HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;

有什么办法吗?

如何处理来自global.asax外部的Application_End事件

以这种方式解决了问题。

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

在全局.asax定义的中

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

然后在代码中

var app = HttpContext.ApplicationInstance as MyHttpApplication;
app.ApplicationEnd += () => { // do something };
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)
        {
        }

我知道答案已经给出了,但也想包括以下内容:

[assembly: PreApplicationStartMethod(typeof(Bootstraper), "Start")]
[assembly: ApplicationShutdownMethod(typeof(Bootstraper), "End")]
public static class Bootstraper
{
    public static void End()
    {
        ...
    }
    public static void Start()
    {
        ...
    }
}