簡體   English   中英

如何處理來自 global.asax 外部的 Application_End 事件

[英]How to handle Application_End event from outside global.asax

我們可以從名為 Application_End() 的 global.asax 文件創建方法附加到此事件。 但我需要像這樣附加它

HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;

有什么辦法嗎?

就這樣解決了問題。

    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 };

Application_End 是一個特殊的“事件”,由 Asp.net 調用,它不屬於 HttpApplication class。

來自 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()
    {
        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM