Provider scope controls instance lifetime. DEFAULT (singleton) creates one instance for the whole app. REQUEST creates a new instance per incoming request — useful for tenant/user context. TRANSIENT creates a new instance per injection point. Request scope propagates up the dependency chain, which can hurt performance.
DEFAULT (singleton) — one shared instance for the app lifetime. Best for stateless services.
REQUEST — new instance per request. Use when service needs request context (e.g., tenant ID, user from JWT).
TRANSIENT — new instance per injection point. Rarely needed; for stateful utilities.
Warning: REQUEST scope propagates — every consumer of a request-scoped provider also becomes request-scoped, impacting performance.