Services & Injection de Dépendances
Service Basique
Section intitulée « Service Basique »import { Injectable } from '@angular/core';
@Injectable({ providedIn: 'root' // Singleton à travers l'app})export class UserService { private users: string[] = [];
getUsers() { return this.users; }
addUser(user: string) { this.users.push(user); }}Injecter dans un Component
Section intitulée « Injecter dans un Component »import { Component, inject } from '@angular/core';import { UserService } from './user.service';
@Component({ selector: 'app-user-list', standalone: true})export class UserListComponent { // Fonction inject() moderne userService = inject(UserService);
// Ou injection par constructeur (traditionnel) constructor(private userService: UserService) {}
users = this.userService.getUsers();}Niveaux de Provide
Section intitulée « Niveaux de Provide »// Niveau root (singleton)@Injectable({ providedIn: 'root' })
// Niveau component (nouvelle instance par component)@Component({ providers: [UserService]})
// Niveau module (déprécié avec standalone)@NgModule({ providers: [UserService]})Tokens d’Injection
Section intitulée « Tokens d’Injection »import { InjectionToken } from '@angular/core';
export const API_URL = new InjectionToken<string>('api.url');
// Fournir@Component({ providers: [ { provide: API_URL, useValue: 'https://api.example.com' } ]})
// InjecterapiUrl = inject(API_URL);Providers Factory
Section intitulée « Providers Factory »export function userServiceFactory(http: HttpClient) { return new UserService(http, '/api/users');}
@Component({ providers: [ { provide: UserService, useFactory: userServiceFactory, deps: [HttpClient] } ]})Bonnes Pratiques
Section intitulée « Bonnes Pratiques »- Utiliser
providedIn: 'root'pour les services à l’échelle de l’app - Utiliser les providers de component pour l’état spécifique au component
- Préférer
inject()à l’injection par constructeur (moderne) - Garder les services sans état quand c’est possible
- Utiliser des interfaces pour l’abstraction

