Код: Выделить всё
builder.Services.AddHostedService();
Код: Выделить всё
var provider = serviceScopeFactory
.CreateScope()
.ServiceProvider;
provider
.GetRequiredService()
.ReturnMyCtorInjectedProvider()
.GetRequiredService();
Насколько мне известно, поскольку EntityService был получен из IServiceProvider определенной области, он должен получить IServiceProivder, который также привязан к той же области, и разрешение той же службы из него должно привести к тому же поведению, что и ее разрешение из 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" от корневого поставщика."