
Dependency Injection
Lifetime serwisów (singleton, scoped, transient), rejestracja serwisów, IServiceProvider, najlepsze praktyki
1Jaka jest główna różnica między lifetime'ami Singleton, Scoped i Transient?
Jaka jest główna różnica między lifetime'ami Singleton, Scoped i Transient?
Odpowiedź
Singleton tworzy pojedynczą instancję na cały lifetime aplikacji, Scoped tworzy jedną instancję na żądanie HTTP (lub scope), a Transient tworzy nową instancję przy każdym wstrzyknięciu. Te lifetime'y określają, kiedy i ile razy kontener DI tworzy instancję serwisu. Używaj Singleton dla bezstanowych współdzielonych serwisów, Scoped dla serwisów związanych z żądaniem (jak DbContext) i Transient dla lekkich bezstanowych serwisów.
2Którego lifetime należy użyć do zarejestrowania DbContext z Entity Framework Core?
Którego lifetime należy użyć do zarejestrowania DbContext z Entity Framework Core?
Odpowiedź
DbContext powinien być zarejestrowany z lifetime Scoped, ponieważ nie jest thread-safe i utrzymuje stan śledzenia encji. Każde żądanie HTTP powinno mieć własną instancję DbContext, aby uniknąć problemów ze współbieżnością. Rejestracja odbywa się za pomocą AddDbContext, który automatycznie konfiguruje lifetime Scoped. Użycie Singleton spowodowałoby błędy współbieżności, a Transient marnowałby zasoby, tworząc zbyt wiele instancji.
3Jak zarejestrować usługę z interface i jej implementacją?
Jak zarejestrować usługę z interface i jej implementacją?
Odpowiedź
Rejestracja usługi odbywa się za pomocą metod AddSingleton, AddScoped lub AddTransient, określając interface jako typ usługi, a klasę konkretną jako implementację. Składnia to services.Add{Lifetime}<IInterface, Implementation>(). To podejście przestrzega zasady odwrócenia zależności i ułatwia testowanie, umożliwiając podmianę implementacji. Kontener DI automatycznie rozwiąże konkretną implementację podczas wstrzykiwania interface.
W jakim przypadku należy preferować AddSingleton zamiast AddScoped?
Jaka jest rola IServiceProvider w systemie DI?
+21 pytań z rozmów
Inne tematy rekrutacyjne .NET
Podstawy C#
LINQ & Delegates
Podstawy języka C#
Podstawy ASP.NET Core
Cykl życia żądania w ASP.NET Core
Configuration & Settings
Cykl życia aplikacji
Entity Framework Core
Minimal APIs
Tworzenie Web API
Async w ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Serializacja JSON
Entity Framework Core zaawansowany
Zaawansowane funkcje C#
Clean Architecture
Logging, Monitoring & Observability
Testy jednostkowe & xUnit
Testy integracyjne
Docker & Containerization
Zarządzanie pakietami NuGet
Memory Management & GC
Programowanie reaktywne
Async/await i wzorce
.NET Design Patterns
Optymalizacja wydajności
Bezpieczeństwo i Best Practices
SignalR i czas rzeczywisty
Architektura Mikroserwisów
Opanuj .NET na następną rozmowę
Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.
Zacznij za darmo