События отслеживания запуска и остановки приложения ASP.NET Core
IApplicationLifetime
— это новый интерфейс в ASP.NET Core. С его помощью можно корректно обрабатывать моменты запуска и завершения ASP.NET приложения.
Интерфейс определен следующим образом:
namespace Microsoft.AspNetCore.Hosting
{
public interface IApplicationLifetime
{
CancellationToken ApplicationStarted { get; }
CancellationToken ApplicationStopping { get; }
CancellationToken ApplicationStopped { get; }
void StopApplication();
}
}
Интерфейс по умолчанию пристутствует в DI-контейнере, поэтому его можно инжектировать в том месте, где это необходимо, например в классе Startup
:
public class Startup
{
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
IApplicationLifetime applicationLifetime,
ILoggerFactory loggerFactory)
{
}
}
Или в контроллере:
public class HomeController : Controller
{
public HomeController(IApplicationLifetime applicationLifetime)
{
}
IApplicationLifetime
содержит три свойства CancellationToken
:
ApplicationStarted
− срабатывает когда хост приложения полностью запущен.ApplicationStopping
− срабатывает когда хост приложения инициирует процедуру завершения. В этот момент запросы от пользователей могут всё ещё обрабатываться.ApplicationStopped
− срабатывает после завершения приложения. В этот момент все запросы от пользователей обработаны.
Используя CancellationToken
можно зарегистрировать обработчик:
public class Startup
{
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
IApplicationLifetime applicationLifetime,
ILoggerFactory loggerFactory)
{
applicationLifetime.ApplicationStarted.Register(OnApplicationStarted);
applicationLifetime.ApplicationStopping.Register(OnApplicationStopping);
applicationLifetime.ApplicationStopped.Register(OnApplicationStopped);
}
protected void OnApplicationStarted()
{
}
protected void OnApplicationStopping()
{
}
protected void OnApplicationStopped()
{
}
}
ApplicationStopping
и ApplicationStopped
блокируют дальнейшее завершение приложения до тех пор, пока не исполнен обработчик.
Дополнительно IApplicationLifetime
имеет метод StopApplication()
. С его помощью можно инициировать процесс завершения приложения.
public class HomeController : Controller
{
private readonly IApplicationLifetime _applicationLifetime;
public HomeController(IApplicationLifetime applicationLifetime)
{
_applicationLifetime = applicationLifetime;
}
public IActionResult Shutdown()
{
_applicationLifetime.StopApplication();
return View();
}
Добавить комментарий