问题
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?
回答1:
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
});
}
}
}
回答2:
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);
}
}
}
来源:https://stackoverflow.com/questions/27444924/is-there-application-end-from-global-asax-in-owin