Sobes.tech
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.