Я пытаюсь добавить фоновый таймер в ASP.NET Core 3.0, который периодически выполняет задачу. Google привел меня к этому , где я реализовал «Временные фоновые задачи». Тем не менее, я застрял в разрешении HostedService в контроллере. Мне нужен определенный экземпляр TimedHealthCheckService, чтобы я мог вызвать другую общедоступную функцию с именем 'GetAvailableODataUrl ()'.
В startup.cs
я использую следующий код:
services.AddHostedService<TimedHealthCheckService>();
TimedHealthCheckService, очевидно, реализует IHostedService:
public class TimedHealthCheckService : IHostedService, IDisposable
В моем контроллере у меня есть следующий конструктор:
public HealthCheckController(ILogger<HealthCheckController> logger, IHostedService hostedService)
{
this.logger = logger;
this.timedHealthCheckService = hostedService as TimedHealthCheckService;
}
Однако, когда я запускаю свой WebAPI, timedHealthCheckService
всегда равен нулю. Кажется, еще один IHostedService вставляется в конструктор. Проверяя hostedService, это на самом деле объект типа GenericWebHostService.
Если я изменяю конструктор контроллера на:
public HealthCheckController(ILogger<HealthCheckController> logger, TimedHealthCheckService hostedService)
Я получаю следующую ошибку:
Не удалось разрешить службу для типа «HealthCheck.Web.TimedHealthCheckService» при попытке активировать «HealthCheck.Web.Controllers.HealthCheckController».
Я также пытался services.AddSingleton<IHostedService, TimedHealthCheckService>();
с тем же результатом.