Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.
Какие времена жизни сервисов есть в ASP.NET Core DI и какие зависимости между ними допустимы?
Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Основные времена жизни: Transient — новый экземпляр при разрешении, Scoped — один в scope, Singleton — один на контейнер. Долгоживущий объект не должен неявно удерживать зависимость, рассчитанную на короткую операцию.
Scoped может использовать transient и singleton. Singleton может зависеть от другого singleton; transient, захваченный singleton, фактически живёт вместе с ним и должен это допускать. Напрямую внедрять scoped в singleton нельзя без изменения ожидаемого жизненного цикла.
Для фоновой операции создают отдельный scope и освобождают его после завершения. Не возвращайте scoped-объект наружу этого scope. Сервисы, используемые одновременно несколькими запросами, должны быть потокобезопасны.