Какие времена жизни сервисов есть в ASP.NET Core DI и какие зависимости между ними допустимы?

Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.

Короткий ответ

Что ответить на собеседовании

Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.

Подробный разбор

Ответ с пояснениями

Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.

Scoped может использовать transient и singleton. Singleton может зависеть от другого singleton; transient, захваченный singleton, фактически живёт вместе с ним и должен это допускать. Напрямую внедрять scoped в singleton нельзя без изменения ожидаемого жизненного цикла.

Для фоновой операции создают отдельный scope и освобождают его после завершения. Не возвращайте scoped-объект наружу этого scope. Сервисы, используемые одновременно несколькими запросами, должны быть потокобезопасны.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее