Невозможно разрешить службу с ограниченной областью действия «xx.IEnumerable`1[xx.IDbContextOptionsConfiguration`1[xx.ExC#

Место общения программистов C#
Ответить
Anonymous
 Невозможно разрешить службу с ограниченной областью действия «xx.IEnumerable`1[xx.IDbContextOptionsConfiguration`1[xx.Ex

Сообщение Anonymous »

Недавно я обновил свой проект с .NET 8 до .NET 9 и обнаружил следующую ошибку при запуске приложения:

Код: Выделить всё

Cannot resolve scoped service 'System.Collections.Generic.IEnumerable`1[Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptionsConfiguration`1[TestEFCore9Worker.Context.ExampleDbContext]]' from root provider.
Изображение

Контекст :
Я использую EF Core для доступа к базе данных. Мой exampleDbContext регистрируется в ServiceCollection с использованием следующей конфигурации в Program.cs:

Код: Выделить всё

var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService();

builder.Services.AddDbContextFactory(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DbConnectionString"));
});

builder.Services.AddDbContext(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("DbConnectionString"));
});

var host = builder.Build();
host.Run();
Ниже приведен конструктор моего примераDbContext. Файл ПримерDbContext.cs

Код: Выделить всё

public class ExampleDbContext : DbContext
{
public ExampleDbContext(DbContextOptions options) : base(options)
{
}

public required virtual DbSet Examples { get; set; }
}
В Worker.cs

Код: Выделить всё

public class Worker : BackgroundService
{
private readonly ILogger _logger;
private readonly IServiceScopeFactory _serviceScopeFactory;

public Worker(ILogger logger, IServiceScopeFactory serviceScopeFactory)
{
_logger = logger;
_serviceScopeFactory = serviceScopeFactory;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}

using (IServiceScope serviceScope = _serviceScopeFactory.CreateScope())
{
var dbContextFactory = serviceScope.ServiceProvider.GetRequiredService();
using var dbContext = dbContextFactory.CreateDbContext();

var exampleModel = new ExampleModel { Name = Guid.NewGuid().ToString() };

dbContext.Examples.Add(exampleModel);

dbContext.SaveChanges();
}

await Task.Delay(1000, stoppingToken);
}
}
}
Приложение отлично работало в .NET 8, но после обновления до .NET 9 начала появляться эта ошибка. Я подозреваю, что это может быть связано с изменениями в внедрении зависимостей или конфигурации EF Core. Может ли кто-нибудь помочь определить основную причину и предложить решение?
ОБНОВЛЕНИЕ: я отредактировал вопрос, включив в него пример, упомянутый @Guru Stron ниже. Я заметил, что если я удалю AddDbContext в Program.cs, ошибка больше не возникнет. Однако я не понимаю, почему, как и в .NET 8, я без проблем использовал оба.

Подробнее здесь: https://stackoverflow.com/questions/791 ... nfiguratio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»