Код: Выделить всё
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();
Код: Выделить всё
public class ExampleDbContext : DbContext
{
public ExampleDbContext(DbContextOptions options) : base(options)
{
}
public required virtual DbSet Examples { get; set; }
}
Код: Выделить всё
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);
}
}
}
ОБНОВЛЕНИЕ: я отредактировал вопрос, включив в него пример, упомянутый @Guru Stron ниже. Я заметил, что если я удалю AddDbContext в Program.cs, ошибка больше не возникнет. Однако я не понимаю, почему, как и в .NET 8, я без проблем использовал оба.
Подробнее здесь: https://stackoverflow.com/questions/791 ... nfiguratio
Мобильная версия