2014-12-12 9 views
30

Startup.cs è un nuovo modo per inizializzare l'app anziché Application_Start in Global.asax e va bene. Ma c'è un posto per mettere la mia logica teardown, per esempio questo:Esiste Application_End da Global.asax in Owin?

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

guardò negli Microsoft.Owin namespace ma sembra solo per avere OwinStartupAttribute. Ciò significa che gli eventi del ciclo di vita dell'applicazione vengono ancora elaborati dall'istanza System.Web.HttpApplication e non sono supportati dalle specifiche OWIN?

risposta

36

AppProperties, trovato in Microsoft.Owin.BuilderProperties, espone lo CancellationToken per OnAppDisposing.

È possibile ottenere questo gettone e registrare un callback ad esso

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

ho confezionato questo in un piccolo aiutante in modo da poter fare questo:

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

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