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仕様でサポートされていないことを意味しますか?
Microsoft.Owin.BuilderProperties
にあるAppProperties
は、CancellationToken
のOnAppDisposing
を公開します。
これを取得できますトークンそしてコールバックを登録できます
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);
}
}
}