Service Lifetimes: Transient, Scoped, Singleton
.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 ve Profesyonel 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)."
.NET Core (C#) Kod Örneği
builder.Services.AddTransient<IEmailSender, EmailSender>();
builder.Services.AddScoped<IUserRepository, UserRepository>(); // DbContext için standart!
builder.Services.AddSingleton<ICacheService, CacheService>();
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.
İlgili Diğer Konular
Async / Await & Thread vs Task
Uzun süren veritabanı veya HTTP isteklerinde işlemci çekirde...
Entity Framework Core: AsNoTracking & Eager Loading
Sadece okuma yapacağın sorgularda EF Core'un hafıza takip me...