Вступить в клуб →
сложнаявопросC# и ASP.NET Core

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, так как контекст восстанавливается из пула соединений и не хранит состояние между вызовами

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела