Injection Scopes
NestJS 🔴 SeniorDéfinition
Définit le cycle de vie d'un provider : DEFAULT (singleton), REQUEST (par requête) ou TRANSIENT (nouvelle instance a chaque injection).
Analogie
Comme un bureau : partage (singleton), un par client (request) ou jetable après chaque usage (transient).
Exemple de code
@Injectable({ scope: Scope.REQUEST })
export class RequestLogger {
private requestId = randomUUID();
log(msg: string) {
console.log(`[${this.requestId}] ${msg}`);
}
}
Cas d'usage
Utiliser REQUEST scope pour des services qui doivent stocker des données spécifiques a chaque requête.
Anti-pattern
Termes liés
En entretien
Explique-moi les trois scopes d'injection dans NestJS.
DEFAULT crée un singleton partagé par toute l'app, REQUEST crée une instance par requête entrante, et TRANSIENT crée une nouvelle instance à chaque injection. C'est comme un bureau : partagé, un par client, ou jetable après chaque usage.
Quand est-ce que tu utiliserais le scope REQUEST, et pourquoi tu éviterais de l'utiliser partout ?
Je l'utilise pour un service qui doit stocker des données spécifiques à une requête, comme un identifiant de requête. Mais l'utiliser partout désactive l'avantage du singleton et dégrade les performances de l'appli.
Fiche mise à jour le 2026-09-27