.NET Core (C#) Orta Seviye Mimari & DI

Service Lifetimes: Transient, Scoped, Singleton & Captive Dependency

.NET IoC konteynerine bir nesneyi ne sıklıkla üretip ne zaman çöpe atacağını söyleme kuralı.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Transient = Tek kullanımlık kağıt bardak (her su içişinde yeni bardak). Scoped = Masandaki servis tabağı (o restoranda oturduğun sürece tek tabak, kalktığında çöpe gider). Singleton = Restoran girişindeki duvar saati (herkes tek bir saate bakar).

Teknik & Mimari Tanım

ASP.NET Core IoC konteynerindeki nesne yaşam döngüleridir: 1) Transient her istekte yeni nesne üretir. 2) Scoped gelen her HTTP isteği (Request) başına 1 nesne üretir. 3) Singleton ise uygulama ömrü boyunca bellekte tek bir örnek tutar.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“Transient her enjeksiyonda yeni nesne üretir. Scoped gelen her HTTP request boyunca tek bir nesne üretir ve request bitince dispose eder (örn: DbContext). Singleton uygulama açılışında bir kez üretilir ve tüm kullanıcılar tarafından ortak kullanılır (örn: Cache, Memory Logger). En kritik mülakat tuzağı Captive Dependency'dir: Singleton bir sınıf içine Scoped bir servis enjekte edilirse Scoped nesne asla dispose edilemez ve memory leak / concurrency patlar.”

.NET Core (C#) Örnek Uygulaması
builder.Services.AddTransient<IEmailSender, EmailSender>();
builder.Services.AddScoped<IUserRepository, UserRepository>(); // DbContext için standart!
builder.Services.AddSingleton<ICacheService, CacheService>();
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

Singleton bir servisin içine Scoped bir servis (örn: DbContext) enjekte etmek! Buna "Captive Dependency" denir ve bellek sızıntısına yol açar.