Фоновый сервис в приложении ASP.NET Core
У меня есть API, созданный с использованием ASP.NET Core 2.1, который выполняет некоторые основные операции CRUD.
Это своего рода приложение конвейера выпуска, посвященное нашим внутренним процессам. Это работает следующим образом:
- Пользователь запрашивает перезагрузку данных (POST)
- Пользователь одобряет перезагрузку данных (POST)
- Пользователь запускает пакет SSIS в базе данных, который инициирует перезагрузку данных (POST)
- Фоновый процесс проверяет состояние этого пакета служб SSIS и после его завершения устанавливает состояние перезагрузки в состояние выполнено / не выполнено
Наша первоначальная идея состояла в том, чтобы создать фоновый сервис, который будет периодически запрашивать базу данных и проверять текущий статус пакета служб SSIS, а затем обновлять нашу сущность до желаемого состояния (выполнено / не выполнено).
Однако это не работает, потому что любая другая служба находится в области действия, в то время как фоновая служба является одиночной.
Что может быть альтернативой для запуска этой фоновой службы, чтобы поддерживать правильное состояние моей сущности? Отдельный проект?
0 ответов
Недавно я создал фоновую службу в своем API, и для меня работает следующее решение:
В конструкторе класса фоновой службы добавьте IServiceProvider в качестве зависимости:
private readonly IServiceProvider _serviceProvider; public MyBackgoundService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; }
В коде реализации используйте поставщика услуг для внедрения контекста базы данных или репозитория.
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while(!stoppingToken.IsCancellationRequested){ using var scope = _serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetRequiredService<MyDbContext>(); } }