我们可以通过名称为Application_End()的global.asax文件创建方法附加到此事件。但我需要像这样附上它
HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;
有什么办法吗?
答案 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()
{
...
}
}