पाठ 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 में एक बार बनती हैं और उसी के भीतर साझा होती हैं।