Был ли опыт работы с DI контейнерами кроме стандартного ASP.NET, например Unity?
Что проверяют
Понимаете ли вы, что умеет встроенный контейнер Microsoft.Extensions.DependencyInjection и чего ему не хватает, и был ли у вас реальный повод взять сторонний. Следом спрашивают, зачем вы его брали и что выбрали бы сейчас.
Как отвечать
Если опыт был, стройте ответ вокруг причины выбора, а не перечня регистраций. Каркас: какой проект и какая версия .NET, почему стандартного контейнера не хватило, что дал сторонний и чем пришлось платить. Детали и цифры нужны ваши, из реального проекта.
Типичные честные причины:
- легаси на .NET Framework: встроенного контейнера там нет, и Unity, Autofac, Ninject или Castle Windsor брали по умолчанию.;
- сканирование сборок: регистрация по соглашениям. Autofac умеет это из коробки, к стандартному контейнеру ставят Scrutor;
- декораторы и перехват: логирование, ретраи и кэш вокруг сервиса без правки кода. В Autofac есть
RegisterDecorator, Castle Windsor и Unity умеют интерсепторы; - модули и дочерние скоупы:
Moduleв Autofac, вложенныеILifetimeScopeдля плагинов и мультитенантности.
Покажите, что знаете текущее положение: встроенный контейнер с .NET 8 умеет keyed services (AddKeyedScoped, [FromKeyedServices]), и часть причин уходить на сторонний отпала. Unity Container почти не развивается, в новый проект его брать не стоит, а Autofac подключается к ASP.NET Core через UseServiceProviderFactory.
Если опыта не было, так и скажите: работали только со встроенным контейнером. Затем назовите, чего ему не хватает, и как решили бы задачу декорирования через Scrutor.
Где спотыкаются
Путают Unity Container с игровым движком Unity. Если вакансия из геймдева, речь может идти о Zenject или VContainer, лучше уточнить.
Рассказывают, что «зарегистрировали все зависимости в контейнере», и на этом всё. Без причины, по которой понадобился именно сторонний контейнер, опыт звучит как пересказ документации.
Не знают про ловушки времени жизни: scoped-сервис внутри singleton живёт вечно (captive dependency). Встроенный контейнер ловит это проверкой ValidateScopes, в Development она включена по умолчанию, а в Autofac такую ошибку легко пропустить.