From 71bfe3b323119c7eda5bf405e556390b147356de Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 9 Apr 2026 13:20:02 +0200 Subject: [PATCH] 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. --- EnvelopeGenerator.ServiceHost/Worker.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/EnvelopeGenerator.ServiceHost/Worker.cs b/EnvelopeGenerator.ServiceHost/Worker.cs index ebea843a..a6aa875b 100644 --- a/EnvelopeGenerator.ServiceHost/Worker.cs +++ b/EnvelopeGenerator.ServiceHost/Worker.cs @@ -6,13 +6,13 @@ public class Worker : BackgroundService { private readonly ILogger _logger; private readonly int _delayMilliseconds; - private readonly FinalizeDocumentJob _finalizeDocumentJob; + private readonly IServiceScopeFactory _scopeFactory; - public Worker(ILogger logger, IConfiguration configuration, FinalizeDocumentJob finalizeDocumentJob) + public Worker(ILogger 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(); + await finalizeDocumentJob.ExecuteAsync(stoppingToken); + await Task.Delay(_delayMilliseconds, stoppingToken); } }