2014-12-12 7 views
30

Startup.cs은 Global.asax에서 Application_Start 대신 앱을 초기화하는 새로운 방법입니다. 괜찮습니다. 하지만 내 분해 논리를 놓을 곳이 예이 들어있다 : Owin에 Global.asax의 Application_End가 있습니까?

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

Microsoft.Owin 네임 스페이스에 보였지만, 단지 OwinStartupAttribute을 갖고있는 것 같아요. 이는 응용 프로그램 수명주기 이벤트가 여전히 System.Web.HttpApplication 인스턴스에 의해 처리되고 OWIN 사양에서 지원되지 않는다는 것을 의미합니까?

답변

36

AppPropertiesMicrosoft.Owin.BuilderProperties에 있으며 OnAppDisposing에 대해 CancellationToken을 나타냅니다.

토큰를 얻을이 작업을 수행 할 수 있도록 내가 조금 도우미에서 이것을 포장

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

그것에 콜백을 등록 할 수 있습니다 :

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

도우미를 :

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