From 59bef13f5d91f35d22d1e3faf30ed37973270c46 Mon Sep 17 00:00:00 2001 From: TekH Date: Sun, 12 Jul 2026 00:22:00 +0200 Subject: [PATCH] fix: Resolve scoped service dependency issue in ProfileManager - Replace IMediator constructor injection with IServiceScopeFactory - Create new scope in ExecuteAsync loop to resolve scoped services (ISQLExecutor) - Fixes: Cannot resolve scoped service from root provider error - Enables ProfileManager to properly execute MediatR queries with scoped dependencies --- ECMJobRunner.WebCron/ProfileManager.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ECMJobRunner.WebCron/ProfileManager.cs b/ECMJobRunner.WebCron/ProfileManager.cs index cd5731e..62661d8 100644 --- a/ECMJobRunner.WebCron/ProfileManager.cs +++ b/ECMJobRunner.WebCron/ProfileManager.cs @@ -8,7 +8,7 @@ using System.Collections.Concurrent; namespace ECMJobRunner.WebCron { - public class ProfileManager(ILogger Logger, IMediator Mediator, IRecurringJobManager JobManager) : BackgroundService + public class ProfileManager(ILogger Logger, IServiceScopeFactory ScopeFactory, IRecurringJobManager JobManager) : BackgroundService { private readonly ConcurrentDictionary Profiles = new(); @@ -22,7 +22,11 @@ namespace ECMJobRunner.WebCron Logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); } - var profiles = await Mediator.Send(new GetProfileQuery() + // Create a scope to resolve scoped services (ISQLExecutor used by MediatR pipeline) + using var scope = ScopeFactory.CreateScope(); + var mediator = scope.ServiceProvider.GetRequiredService(); + + var profiles = await mediator.Send(new GetProfileQuery() { Active = true, IncludeSqlJobs = true