Refactored Worker to use IServiceScopeFactory instead of directly injecting FinalizeDocumentJob. Now, a new scope is created in each loop iteration, and FinalizeDocumentJob is resolved from the scoped service provider. This enables FinalizeDocumentJob to use scoped dependencies and improves DI flexibility.
35 lines
1.2 KiB
C#
35 lines
1.2 KiB
C#
using EnvelopeGenerator.ServiceHost.Jobs;
|
|
|
|
namespace EnvelopeGenerator.ServiceHost;
|
|
|
|
public class Worker : BackgroundService
|
|
{
|
|
private readonly ILogger<Worker> _logger;
|
|
private readonly int _delayMilliseconds;
|
|
private readonly IServiceScopeFactory _scopeFactory;
|
|
|
|
public Worker(ILogger<Worker> logger, IConfiguration configuration, IServiceScopeFactory scopeFactory)
|
|
{
|
|
_logger = logger;
|
|
_delayMilliseconds = Math.Max(1, configuration.GetValue("Worker:DelayMilliseconds", 1000));
|
|
_scopeFactory = scopeFactory;
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
while (!stoppingToken.IsCancellationRequested)
|
|
{
|
|
if (_logger.IsEnabled(LogLevel.Information))
|
|
{
|
|
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
|
}
|
|
|
|
using var scope = _scopeFactory.CreateScope();
|
|
var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService<FinalizeDocumentJob>();
|
|
await finalizeDocumentJob.ExecuteAsync(stoppingToken);
|
|
|
|
await Task.Delay(_delayMilliseconds, stoppingToken);
|
|
}
|
|
}
|
|
}
|