如何从global.asax外部处理Application_End事件

时间:2011-05-24 13:44:26

标签: c# asp.net events

我们可以通过名称为Application_End()的global.asax文件创建方法附加到此事件。但我需要像这样附上它

HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;

有什么办法吗?

3 个答案:

答案 0 :(得分:4)

以这种方式解决了问题。

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

答案 1 :(得分:3)

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)
        {

        }

答案 2 :(得分:1)

我知道已经给出了答案,但也希望包含这种方式:

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