Singleton зависит от DbContext: захваченная зависимость
Разработчик решил ускорить отчёты и завёл кэширующий сервис:
builder.Services.AddDbContext<AppDbContext>(o => o.UseNpgsql(cs)); // Scoped
builder.Services.AddSingleton<ReportCache>(); // в конструкторе просит AppDbContext
Что произойдёт с таким приложением?
- Всё корректно: время жизни определяется местом использования, поэтому в каждом запросе ReportCache получит свежий DbContext
- Это captive dependency: проверка областей запретит singleton зависеть от scoped, а без неё один DbContext достанется всем запросам сразу
- Ничего страшного: DbContext потокобезопасен, поэтому один общий экземпляр — это даже экономия на подключениях
- DbContext будет создаваться заново при каждом обращении к методам ReportCache, так как контекст восстанавливается из пула соединений и не хранит состояние между вызовами
