Sobes.tech
Junior — Middle

Какви типове жизнени цикли на обекти съществуват в IoC контейнера и как се прилагат?

sobes.tech AI

Отговор от AI

В IoC (Inversion of Control) контейнерите обикновено се използват следните типове жизнени цикли на обектите:

  1. Transient (Преходен) — при всяко искане контейнерът създава нов екземпляр на обекта. Използва се, когато е необходим нов обект за всяка операция.

  2. Singleton (Единствен) — контейнерът създава един екземпляр на обекта при първото искане и го връща при всички следващи. Подходящо за услуги със състояние или ресурси, които трябва да са уникални.

  3. Scoped (Обхват) — обектът се създава веднъж за определен scope (например, за всяко искане в уеб приложение) и се използва повторно в рамките на този scope. След приключване на scope, обектът се унищожава.

Пример в C# с използване на Microsoft.Extensions.DependencyInjection:

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

Изборът на жизнен цикъл зависи от изискванията към състоянието на обекта и производителността на приложението.