Owin的Global.asax有Application_End吗?

2oo*_*oom 35 .net asp.net asp.net-mvc owin katana

Startup.cs是一种初始化应用程序而不是Application_StartGlobal.asax 的新方法,它很好.但是有没有地方放置我的拆解逻辑,例如:

public class WebApiApplication : System.Web.HttpApplication
{
  protected void Application_End()
  {
    // Release you ServiceBroker listener
    SqlDependency.Stop(connString);
  }
}
Run Code Online (Sandbox Code Playgroud)

Microsoft.Owin命名空间中查找,但它似乎只有OwinStartupAttribute.这是否意味着应用程序生命周期事件仍由System.Web.HttpApplication实例处理,并且OWIN规范不支持?

Mih*_*scu 42

AppProperties在发现Microsoft.Owin.BuilderProperties,暴露CancellationTokenOnAppDisposing.

你可以得到这个令牌并注册一个回调到它

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var properties = new AppProperties(app.Properties);
        CancellationToken token = properties.OnAppDisposing;
        if (token != CancellationToken.None)
        {
            token.Register(() =>
            {
                // do stuff
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*yde 12

我把它打包成一个小帮手,所以你可以这样做:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.OnDisposing(() =>
        {
            // do stuff
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

帮助者:

static class AppBuilderExtensions
{
    public static void OnDisposing(this IAppBuilder app, Action cleanup)
    {
        var properties = new AppProperties(app.Properties);
        var token = properties.OnAppDisposing;
        if (token != CancellationToken.None)
        {
            token.Register(cleanup);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)