Подтвердить что ты не робот

Есть приложение Application_End из Global.asax в Owin?

Startup.cs - это новый способ инициализации вашего приложения вместо Application_Start в Global.asax, и это прекрасно. Но есть ли место, где я могу использовать логику разлома, например:

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

Посмотрел Microsoft.Owin пространство имен, но похоже, что оно имеет OwinStartupAttribute. Означает ли это, что события жизненного цикла приложения все еще обрабатываются экземпляром System.Web.HttpApplication и не поддерживаются спецификацией OWIN?

4b9b3361

Ответ 1

AppProperties, найденный в Microsoft.Owin.BuilderProperties, предоставляет CancellationToken для OnAppDisposing.

Вы можете получить этот токен и зарегистрировать обратный вызов

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

Я упаковал это в небольшом помощнике, чтобы вы могли сделать это:

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