Refactor Worker to resolve FinalizeDocumentJob per scope

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.
This commit is contained in:
2026-04-09 13:20:02 +02:00
parent 089d2bd1cb
commit 71bfe3b323

View File

@@ -6,13 +6,13 @@ public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly int _delayMilliseconds;
private readonly FinalizeDocumentJob _finalizeDocumentJob;
private readonly IServiceScopeFactory _scopeFactory;
public Worker(ILogger<Worker> logger, IConfiguration configuration, FinalizeDocumentJob finalizeDocumentJob)
public Worker(ILogger<Worker> logger, IConfiguration configuration, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_delayMilliseconds = Math.Max(1, configuration.GetValue("Worker:DelayMilliseconds", 1000));
_finalizeDocumentJob = finalizeDocumentJob;
_scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
@@ -24,7 +24,10 @@ public class Worker : BackgroundService
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}
await _finalizeDocumentJob.ExecuteAsync(stoppingToken);
using var scope = _scopeFactory.CreateScope();
var finalizeDocumentJob = scope.ServiceProvider.GetRequiredService<FinalizeDocumentJob>();
await finalizeDocumentJob.ExecuteAsync(stoppingToken);
await Task.Delay(_delayMilliseconds, stoppingToken);
}
}