Какви типове жизнени цикли на обекти съществуват в IoC контейнера и как се прилагат?
sobes.tech AI
Отговор от AI
В IoC (Inversion of Control) контейнерите обикновено се използват следните типове жизнени цикли на обектите:
-
Transient (Преходен) — при всяко искане контейнерът създава нов екземпляр на обекта. Използва се, когато е необходим нов обект за всяка операция.
-
Singleton (Единствен) — контейнерът създава един екземпляр на обекта при първото искане и го връща при всички следващи. Подходящо за услуги със състояние или ресурси, които трябва да са уникални.
-
Scoped (Обхват) — обектът се създава веднъж за определен scope (например, за всяко искане в уеб приложение) и се използва повторно в рамките на този scope. След приключване на scope, обектът се унищожава.
Пример в C# с използване на Microsoft.Extensions.DependencyInjection:
services.AddTransient<IService, Service>(); // нов обект при всяко искане
services.AddSingleton<IService, Service>(); // един обект за целия жизнен цикъл на приложението
services.AddScoped<IService, Service>(); // един обект за всяко HTTP искане
Изборът на жизнен цикъл зависи от изискванията към състоянието на обекта и производителността на приложението.