Dependency Injection Lifetimes
Give a real production-style example of using Dependency Injection Lifetimes. Walk through the scenario end-to-end.
Answers use simple, clear English.
Quick interview answer
Scenario: Register EF DbContext as Scoped; IEmailSender as Transient; IOptionsMonitor as Singleton. Implementation notes: Constructor injection only in controllers; validate scopes at startup in dev.
Detailed answer
Scenario: Register EF DbContext as Scoped; IEmailSender as Transient; IOptionsMonitor as Singleton. Implementation notes: Constructor injection only in controllers; validate scopes at startup in dev. Core: Singleton one instance app-wide; Scoped per request (DbContext); Transient new each resolve. Captive dependency: don't inject Scoped into Singleton. Real-time example: Register EF DbContext as Scoped; IEmailSender as Transient; IOptionsMonitor as Singleton. Pros: Built-in container; testable via constructor injection. Cons: Wrong lifetime causes stale state or thread-safety bugs. Common mistakes: Singleton holding mutable Scoped service; resolving Scoped from root provider. Best practices: Constructor injection only in controllers; validate scopes at startup in dev. Audience level: Junior.
Full explanation
Singleton one instance app-wide; Scoped per request (DbContext); Transient new each resolve. Captive dependency: don't inject Scoped into Singleton.
Real example & use case
Register EF DbContext as Scoped; IEmailSender as Transient; IOptionsMonitor as Singleton.
Pros & cons
Pros: Built-in container; testable via constructor injection. Cons: Wrong lifetime causes stale state or thread-safety bugs.
Common mistakes
Singleton holding mutable Scoped service; resolving Scoped from root provider.
Best practices
Constructor injection only in controllers; validate scopes at startup in dev.
Follow-up questions
- How would you test Dependency Injection Lifetimes?
- What metrics prove Dependency Injection Lifetimes is healthy in prod?
- How does Dependency Injection Lifetimes change at 10× traffic?