web-dev-qa-db-ja.com

OwinにGlobal.asaxのApplication_Endはありますか?

Startup.cs は、Global.asaxのApplication_Startの代わりにアプリを初期化する新しい方法であり、問​​題ありません。しかし、私の分解ロジックを置く場所はありますか、例えばこれ:

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

Microsoft.Owin 名前空間を調べましたが、OwinStartupAttributeしかないようです。これは、アプリケーションのライフサイクルイベントがまだSystem.Web.HttpApplicationインスタンスによって処理され、OWIN仕様でサポートされていないことを意味しますか?

35
2ooom

Microsoft.Owin.BuilderPropertiesにあるAppPropertiesは、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
            });
        }
    }
}

私はこれを小さなヘルパーにパッケージ化したので、これを行うことができます:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.OnDisposing(() =>
        {
            // do stuff
        });
    }
}

ヘルパー:

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);
        }
    }
}
14
Thomas Eyde