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