TGViewer
C# Short Posts 🔞 C# Short Posts 🔞 @dimasshortposts · 309 subscribers
Post #190 234
🍓Очень странные зависимости.
Сегодня будет странная задачка без правильного ответа. Есть вот такая регистрация сервисов:

services.AddSingleton<IDialogProcessor, TelegramDialogProcessor>();

services.AddTransient<GetUserFeatureHandler>();

services.AddScoped<ITraleDbContext>(provider=>provider.GetService<TraleDbContext>() ?? throw new InvalidOperationException());

Порядок регистрации совпадает с порядком зависимости, то есть:
⬇️ TelegramDialogProcessor(GetUserFeatureHandler handler)
⬇️ GetUserFeatureHandler(ITraleDbContext context)
⬇️ ITraleDbContext - ни от кого не зависит

Методы IDialogProcessor вызываются из кода контроллера. Вопрос. Сможет ли разрезолвиться scoped сервис ITraleDbContext при таком вызове?

Короче ответ: "квантовое да".

По идее, контроллер создаст скоуп и далее все вызовы будут идти с этим скоупом. И все должно заработать и это работатет. Но… Не в тестах с использованием TestServer!

😵 Причем не будет работать, если запускать эти тесты из консоли при помощи dotnet test. В этом случае ITraleDbContext не резолвится с жалобами на потерянный скоуп: "Cannot resolve scoped service 'Application.Common.ITraleDbContext' from root provider."

А сейчас вообще странное — при запуске тестов из Test Explorer райдера всё работает! Как и почему? Я вот сейчас пытаюсь понять.

❓ Кто-то знает, как посмотреть, какую консольную команду вызывает райдер при запуске тестов? А может у кого есть предположение, почему так может быть? Почему блин скоуп может теряться в зависимости от того, как запускать тесты блин?

Наткнулся вот недавно в своем тралеботе, интересно было бы докопаться до сути.
  • 🤔 4
  • 👀 2
More from @dimasshortposts
  1. Sep 30, 2026🛤 Путь до Tier1: от чего он зависит В прошлый раз мы гоняли hello world в цикле и увидели…
  2. Sep 26, 2026🧵 Тредик для вопросов по докладу про MAF на дотнексте В докладе многие подробности опусти…
  3. Sep 23, 2026Даже самым хардкорным ребятам надо отдыхать, так что отдыхаем, мои чюваки 🕺 🧑‍💻dp🥁 #he…
  4. Sep 16, 2026🎯 Instrumented Tier0: профилирование кода В прошлый раз мы разобрали два уровня компиляци…
  5. Sep 15, 2026🔜 Готовлюсь к DOTNEXT 2026 В прошлом году за две недели до выступления я зачитывал свой д…
  6. Sep 9, 2026C# Short Posts 🔞 pinned «🐸 О чём этот канал? Кажется, я уже достаточно давно веду этот к…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →