Код: Выделить всё
builder.Services.AddHostedService();
Код: Выделить всё
var provider = serviceScopeFactory
.CreateScope()
.ServiceProvider;
provider
.GetRequiredService()
.ReturnMyCtorInjectedProvider()
.GetRequiredService();
Насколько мне известно, поскольку EntityService был получен из IServiceProvider определенной области, он должен получить IServiceProvider, который также привязан к той же области, и разрешение той же службы из нее должно привести к тому же поведению, что и ее разрешение из IServiceProvider вновь созданной области, но получаю хорошо известную ошибку:
Службу с областью действия не удалось разрешить от корневого поставщика
Похоже, что в конструктор был внедрен корневой поставщик, но чем объясняется такое поведение? Что мне не хватает?
Полный код — это конструктор EntityService:
Код: Выделить всё
public class EntityService (DbContextOptions options,
IServiceProvider serviceProvider,
IEncryptionService encryptionService) : DbContext(options)
{
// ...
}
Код: Выделить всё
public class StartupCleaner(IServiceScopeFactory serviceScopeFactory) : IHostedService
{
// ...
}
Код: Выделить всё
builder.Services.AddDbContextPool(
opts => opts.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))
);
builder.Services.AddHostedService();
Код: Выделить всё
public Task StartAsync(CancellationToken cancellationToken)
{
var sp = serviceScopeFactory
.CreateScope()
.ServiceProvider;
var entityService = sp.GetRequiredService();
entityService.ReturnMyCtorInjectedProvider()
.GetRequiredService();
// ...
}
Код: Выделить всё
public IServiceProvider ReturnMyCtorInjectedProvider()
{
return serviceProvider;
}
Невозможно разрешить ограниченную службу «Axoneckend.Services.EntityService» от корневого поставщика