# Service Lifetimes — .NET Core: वेब API बनाएँ, टेस्ट करें और शिप करें

Source: https://www.geekswithgeeks.com/hi/dotnet-core/di-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 उसे साझा करती हैं।

```csharp
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 पर पकड़ लेती है।

**Quiz:** एक HTTP request के दौरान scoped service के कितने instances होते हैं?

- [ ] हर उपयोग पर नया
- [ ] शून्य
- [x] एक
- [ ] हर thread पर हमेशा एक

*Answer:* एक. Scoped services request scope में एक बार बनती हैं और उसी के भीतर साझा होती हैं।
