2014-12-12 10 views
30

Startup.cs to nowy sposób na zainicjowanie aplikacji zamiast Application_Start w Global.asax i wszystko jest w porządku. Ale jest tam gdzie umieścić moje logikę przerywaniem, na przykład tak:Czy jest plik Application_End z Global.asax w Owin?

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

zajrzał Microsoft.Owin nazw, ale wydaje się tylko do OwinStartupAttribute. Czy to oznacza, że ​​zdarzenia cyklu życia aplikacji są nadal przetwarzane przez instancję System.Web.HttpApplication i nie są obsługiwane przez specyfikację OWIN?

Odpowiedz

36

AppProperties, znalezione w Microsoft.Owin.BuilderProperties, odsłania CancellationToken dla OnAppDisposing.

Można uzyskać ten tokena i zarejestrować zwrotnego niej

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

ja pakuje to w małym pomocnikiem, więc można to zrobić:

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

pomocnika:

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