पाठ 16 / 26
Service Lifetimes
Transient, scoped और singleton में चुनें और captive dependency bug से बचें।
तीन lifetimes
Transient: हर बार नया instance। Scoped: हर HTTP request के लिए एक instance। Singleton: पूरे ऐप के लिए एक instance। Database contexts scoped होते हैं; stateless helpers और caches अक्सर singleton।
हर lifetime register करना
काम करने वाली सबसे छोटी lifetime चुनें। Singleton thread-safe होना चाहिए क्योंकि कई requests उसे साझा करती हैं।
builder.Services.AddTransient<IIdGenerator, IdGenerator>();
builder.Services.AddScoped<IOrderService, OrderService>();
builder.Services.AddSingleton<IClock, SystemClock>();Captive dependency
Singleton को DbContext जैसी scoped service नहीं पकड़नी चाहिए: वरना एक request का instance हमेशा ज़िंदा रहेगा। Development में scope validation इसे startup पर पकड़ लेती है।
त्वरित जाँच: एक HTTP request के दौरान scoped service के कितने instances होते हैं?
- हर उपयोग पर नया
- शून्य
- एक
- हर thread पर हमेशा एक
Answer
एक — Scoped services request scope में एक बार बनती हैं और उसी के भीतर साझा होती हैं।