2014-12-12 5 views
30

Startup.cs ist eine neue Möglichkeit, Ihre App anstelle von Application_Start in Global.asax zu initialisieren und es ist in Ordnung. Aber ist es ein Ort, meine Teardown Logik zu setzen, zum Beispiel dieses:Gibt es Application_End von Global.asax in Owin?

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

Sah in Microsoft.Owin Namespace, aber es scheint nur OwinStartupAttribute zu haben. Bedeutet dies, dass Anwendungslebenszyklusereignisse noch von der Instanz System.Web.HttpApplication verarbeitet werden und nicht von der OWIN-Spezifikation unterstützt werden?

Antwort

36

AppProperties, gefunden in Microsoft.Owin.BuilderProperties, exponiert die CancellationToken für OnAppDisposing.

können Sie erhalten diese Token und registrieren eine Rückruf es

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 
      }); 
     } 
    } 
} 
10

ich dies in einem kleinen Helfer verpackt, so dass Sie dies tun können:

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

Der Helfer:

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); 
     } 
    } 
}