Вы ввели Serivce IMyAppCoreService
как Scoped. Службы с заданной областью могут быть разрешены только с помощью ScopedServiceProvider
.
Мое первое предположение состоит в том, что вы не хотели - вы хотели внедрить свою службу как синглтон:
services.AddSingleton<IMyAppCoreService, MyAppCoreService>();
Однако это может не работать, так как вы используете EF Core, который внедряет свои классы, подобные контексту, как ограниченные. У вас есть два варианта:
- Попросите EF Core внедрить свой класс контекста как временный. Я бы не стал предлагать этого, так как вы будете нести ответственность за его утилизацию. Если вы хотите завершить работу с go, вот как это сделать (Startup.cs / Program.cs):
services.AddDbContext<YourContext>(opts => { ...config...}, ServiceLifetime.Transient);
Создайте область вручную:
Имейте свойство IServiceProvider
с именем ServiceProvider, внедренное в Worker
вместо вашей службы.
в ExecuteAsyn c -L oop:
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
using (var scope = ServiceProvider.CreateScope())
{
scope.ServiceProvider.GetRequiredService<IMyAppCoreService>().CheckAndProcessResult();
}
await Task.Delay(1000, stoppingToken);
Это аккуратно удалит каждый объект контекста EFCore-Data каждого L oop и, на мой взгляд, это самый чистый вариант.