Sobes.tech
Back to questions
Junior — Middle
73

Как различаются жизненные циклы объектов в Dependency Injection для транзиентного, Scoped и синглтон режима?

Answer from AI

sobes.tech AI

В Dependency Injection (DI) в C# жизненный цикл объекта определяется режимом его регистрации:

  • Transient (транзиентный): каждый раз при запросе объекта создаётся новый экземпляр. Используется для легковесных, не сохраняющих состояние сервисов.

  • Scoped (область видимости): объект создаётся один раз на область видимости, обычно на один HTTP-запрос в веб-приложениях. Все зависимости в рамках этого запроса получают один и тот же экземпляр.

  • Singleton (одиночка): объект создаётся один раз при первом запросе и живёт на протяжении всего времени работы приложения. Все запросы получают один и тот же экземпляр.

Пример регистрации в ASP.NET Core:

services.AddTransient<IService, Service>(); // новый объект каждый раз
services.AddScoped<IService, Service>();   // один объект на запрос
services.AddSingleton<IService, Service>(); // один объект на всё время

Таким образом, выбор режима зависит от того, как долго должен жить объект и как он используется.