Care este diferența dintre domeniul obiectelor Scoped și Transient în contextul injecției de dependențe?
sobes.tech AI
Răspuns de la AI
În contextul injecției de dependențe în C#, domeniile Scoped și Transient determină durata de viață a obiectelor create:
-
Transient: obiectul este creat de fiecare dată când este solicitat. Aceasta înseamnă că la fiecare apel al serviciului sau injecție va fi creat o nouă instanță.
-
Scoped: obiectul este creat o singură dată pe durata unei solicitări (scope). În aplicațiile web, acest lucru înseamnă de obicei că în cadrul unei singure solicitări HTTP, aceeași instanță va fi utilizată, dar pentru o altă solicitare va fi creată o nouă.
Exemplu:
services.AddTransient<IMyService, MyService>(); // obiect nou la fiecare solicitare
services.AddScoped<IMyService, MyService>(); // un obiect pe solicitare HTTP
Astfel, Scoped este convenabil pentru păstrarea stării în cadrul unei singure solicitări, iar Transient pentru servicii fără stare (stateless), unde este nevoie de o nouă instanță de fiecare dată.