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
This commit is contained in:
2026-07-12 00:22:00 +02:00
parent 475679c6e2
commit 59bef13f5d

View File

@@ -8,7 +8,7 @@ using System.Collections.Concurrent;
namespace ECMJobRunner.WebCron
{
public class ProfileManager(ILogger<ProfileManager> Logger, IMediator Mediator, IRecurringJobManager JobManager) : BackgroundService
public class ProfileManager(ILogger<ProfileManager> Logger, IServiceScopeFactory ScopeFactory, IRecurringJobManager JobManager) : BackgroundService
{
private readonly ConcurrentDictionary<string, CfgProfileDto> 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<IMediator>();
var profiles = await mediator.Send(new GetProfileQuery()
{
Active = true,
IncludeSqlJobs = true