Injection Scopes

NestJS 🔴 Senior

Dé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

Utiliser REQUEST scope partout, ce qui désactive le singleton et dégrade les performances.
#core#interview

En entretien

  1. 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.

  2. 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

← → au clavier pour passer d'une fiche à l'autre