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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user