Junior — Middle
Czym różni się zakres obiektów Scoped od Transient w kontekście wstrzykiwania zależności?
sobes.tech AI
Odpowiedź od AI
W kontekście wstrzykiwania zależności w C# zakresy Scoped i Transient określają czas życia tworzonych obiektów:
-
Transient: obiekt jest tworzony za każdym razem, gdy jest żądany. Oznacza to, że przy każdym wywołaniu serwisu lub iniekcji zostanie utworzony nowy egzemplarz.
-
Scoped: obiekt jest tworzony raz na czas jednego żądania (scope). W aplikacjach webowych oznacza to zazwyczaj, że w ramach jednego żądania HTTP używany jest ten sam egzemplarz, ale dla innego żądania zostanie utworzony nowy.
Przykład:
services.AddTransient<IMyService, MyService>(); // nowy obiekt przy każdym żądaniu
services.AddScoped<IMyService, MyService>(); // jeden obiekt na żądanie HTTP
W ten sposób Scoped jest wygodny do przechowywania stanu w ramach jednego żądania, a Transient — dla serwisów bezstanowych (stateless), gdzie potrzebny jest nowy egzemplarz za każdym razem.