Cours Angular · Module 5: Services et DI

Les Injection Tokens et la DI avancée

1 min de lecture
Dans cette leçon3

Les Injection Tokens

Les tokens permettent d'injecter des valeurs autres que des classes :

1import { InjectionToken, inject } from '@angular/core';
2
3// Définition du token
4export const API_URL = new InjectionToken<string>('API_URL');
5export const FEATURE_FLAGS = new InjectionToken<FeatureFlags>('FEATURE_FLAGS');
6
7// Enregistrement dans la configuration
8export const appConfig: ApplicationConfig = {
9  providers: [
10    { provide: API_URL, useValue: 'https://api.dojo.com/v1' },
11    {
12      provide: FEATURE_FLAGS,
13      useValue: {
14        darkMode: true,
15        newDashboard: false
16      }
17    }
18  ]
19};
20
21// Utilisation
22@Injectable({ providedIn: 'root' })
23export class ApiService {
24  private apiUrl = inject(API_URL);
25
26  getSamurai(id: number) {
27    return this.http.get(`${this.apiUrl}/samurai/${id}`);
28  }
29}

Les fabriques de providers

1// useFactory - création dynamique de valeur
2{
3  provide: LoggerService,
4  useFactory: (env: EnvironmentService) => {
5    return env.isProduction()
6      ? new ProductionLogger()
7      : new DevelopmentLogger();
8  },
9  deps: [EnvironmentService]
10}
11
12// useClass - substitution d'implémentations
13{
14  provide: StorageService,
15  useClass: environment.production
16    ? CloudStorageService
17    : LocalStorageService
18}
19
20// useExisting - alias
21{
22  provide: OldService,
23  useExisting: NewService
24}

Providers multiples

1export const HTTP_INTERCEPTORS = new InjectionToken<HttpInterceptor[]>('HTTP_INTERCEPTORS');
2
3// On peut ajouter plusieurs valeurs à un même token
4{
5  provide: HTTP_INTERCEPTORS,
6  useClass: AuthInterceptor,
7  multi: true
8},
9{
10  provide: HTTP_INTERCEPTORS,
11  useClass: LoggingInterceptor,
12  multi: true
13}

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. À quoi sert InjectionToken dans Angular ?

  2. 2. Quelle clé utilises-tu pour assigner une valeur constante à un InjectionToken dans providers ?

Voici 2 des 3 questions de cette leçon. Réponds aux autres dans le jeu.

Tâches pratiques dans le jeu

  • Tri horizontal

    Ordonne sur une seule ligne l'expression qui crée un InjectionToken :

  • Éditeur de code

    Complète l'InjectionToken pour la configuration de l'API et son utilisation dans le composant.

  • Tri horizontal

    Ordonne sur une seule ligne l'objet provider qui utilise une factory :

  • Clique dans l'ordre

    Ordonne sur une seule ligne l'indicateur qui permet d'ajouter plusieurs valeurs à un même jeton :

  • Tri vertical

    Ordonne l'enregistrement d'un InjectionToken dans la configuration de l'application (lignes consécutives) :

Articles utiles