IDbContextFactory и DbContext со Scoped сервисами в конструкторе
Есть DbContext, конструктор которого принимает некий Scoped сервис, Singleton'ом он быть не может никак, только Scoped и никак иначе.
Проблема возникает на стадии создания контекста через фабрику контекстов, которая добавляется по дефолту как Singleton сервис.
Так вот, вопрос: как быть в ситуации, когда Scoped сервис нужно передать в конструктор контекста через фабрику?
public abstract class TestDbContext : DbContext
{
protected IDateTimeService DateTimeService { get; }
protected Settings ServerSettings { get; }
protected TestDbContext(DbContextOptions options, IDateTimeService dateTimeService, IOptions<Settings> settings) : base(options)
{
DateTimeService = dateTimeService;
ServerSettings = settings.Value;
}
}
Если просто регистрировать фабрику как Scoped сервис, то чем это может грозить, правильно/хорошо ли это?
public static void AddGisDbContextFactory<TDbContext>(this IServiceCollection services)
where TDbContext : TestDbContext
{
services.AddDbContextFactory<TDbContext>(x =>
{
x.UseSqlServer(sqlOptions =>
{
sqlOptions.CommandTimeout(60);
});
x.ConfigureDbContext();
}, ServiceLifetime.Scoped);
}