Startup.cs is a new way to initialize your app instead of Application_Start in Global.asax and it's fine. But is there a place to put my teardown logic, for example this:
public class WebApiApplication : System.Web.HttpApplication { protected void Application_End() { // Release you ServiceBroker listener SqlDependency.Stop(connString); } } Looked in Microsoft.Owin namespace but it only seems to have OwinStartupAttribute. Does this mean that application lifecycle events are still processed by System.Web.HttpApplication instance and are not supported by OWIN specification?
AppProperties, found in Microsoft.Owin.BuilderProperties, exposes the CancellationToken for OnAppDisposing.
You can get this token and register a callback to it
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 }); } } }
I packaged this up in a little helper so you can do this:
public class Startup { public void Configuration(IAppBuilder app) { app.OnDisposing(() => { // do stuff }); } } The helper:
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); } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With