Эта ссылка мне очень помогла.
Внедрение IServiceScopeFactory
внутрь HostedService
может предоставить экземпляры, решающие проблему.Не уверен, что это лучший способ сделать это.Если вы, ребята, знаете лучший способ сделать это, оставьте комментарий:)
Вот код.
Реализация HostedService:
public class TestService : HostedService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public TestService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
using (var scope = _serviceScopeFactory.CreateScope())
{
IMyService myScopedService = scope.ServiceProvider.GetRequiredService<IMyService>();
while (!cancellationToken.IsCancellationRequested)
{
await myScopedService.Execute();
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
}
}
}