Injection de dépendance

L’injection de dépendance consiste à fournir à une classe les objets dont elle a besoin (ses dépendances) de l’extérieur, plutôt que de les créer elle-même avec new.

Mauvaise approche (fort couplage) :

class NotificationService {
    public function notifier(string $email): void {
        $mailer = new GmailMailer(); // ← dépendance codée en dur
        $mailer->envoyer($email, "Bonjour", "Contenu");
    }
}

→ Impossible de changer de mailer sans modifier le code.
→ Impossible de tester sans appeler Gmail.

Bonne approche (injection) :

class NotificationService {
    private MailerInterface $mailer;

    // On "injecte" le mailer via le constructeur
    public function __construct(MailerInterface $mailer) {
        $this->mailer = $mailer;
    }

    public function notifier(string $email): void {
        $this->mailer->envoyer($email, "Bonjour", "Contenu");
    }
}

→ La classe ne sait pas quel mailer est utilisé.
→ Vous décidez à l’extérieur quelle implémentation fournir.

L’injection découple le code, facilite les tests et les évolutions.

Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.