.NET

Dependency Injection

Servis lifetime'ları (singleton, scoped, transient), servis kaydı, IServiceProvider, en iyi uygulamalar

24 mülakat soruları·
Mid-Level
1

Singleton, Scoped ve Transient lifetime'ları arasındaki temel fark nedir?

Cevap

Singleton tüm uygulama lifetime'ı için tek bir instance oluşturur, Scoped her HTTP isteği (veya scope) başına bir instance oluşturur ve Transient her enjekte edildiğinde yeni bir instance oluşturur. Bu lifetime'lar, DI container'ının bir servisi ne zaman ve kaç kez örnekleyeceğini belirler. Durumsuz paylaşılan servisler için Singleton, isteğe bağlı servisler (DbContext gibi) için Scoped ve durumsuz hafif servisler için Transient kullanın.

2

Bir Entity Framework Core DbContext kaydetmek için hangi lifetime kullanılmalıdır?

Cevap

DbContext, thread-safe olmadığı ve entity tracking durumunu koruduğu için Scoped lifetime ile kaydedilmelidir. Eşzamanlılık sorunlarını önlemek için her HTTP isteğinin kendi DbContext örneği olmalıdır. Kayıt, Scoped lifetime'ı otomatik olarak yapılandıran AddDbContext ile yapılır. Singleton kullanmak eşzamanlılık hatalarına neden olur ve Transient çok fazla örnek oluşturarak kaynakları israf eder.

3

Bir servisi bir interface ve onun implementasyonu ile nasıl kaydedersiniz?

Cevap

Servis kaydı, interface'i servis türü ve somut sınıfı implementasyon olarak belirterek AddSingleton, AddScoped veya AddTransient metotlarıyla yapılır. Söz dizimi services.Add{Lifetime}<IInterface, Implementation>() şeklindedir. Bu yaklaşım bağımlılığın tersine çevrilmesi ilkesine uyar ve implementasyonların değiştirilmesine olanak tanıyarak testi kolaylaştırır. DI kapsayıcısı, interface enjekte edilirken somut implementasyonu otomatik olarak çözer.

4

AddScoped yerine AddSingleton ne zaman tercih edilmelidir?

5

DI sisteminde IServiceProvider'ın rolü nedir?

+21 mülakat soruları

Bir sonraki mülakatın için .NET'de uzmanlaş

Tüm sorulara, flashcards'a, teknik testlere, code review alıştırmalarına ve mülakat simülatörlerine eriş.

Ücretsiz başla