Le conteneur IoC

Le conteneur IoC (conteneur d'inversion de contrôle) est un composant central de Bluebird. Un conteneur IoC est une fabrique d'objets configurable, capable non seulement de créer les objets mais aussi de les configurer de sorte qu'ils soient prêts à utiliser immédiatement après la création. Cet article de Martin Fowler explique l'utilité d'un conteneur IoC.

L'injection de dépendances permet de simplifier le code et de gagner en abstraction.

Le conteneur IoC de Bluebird s'appuie sur des fonctions lambda (ou fermetures) pour instancier les objets, ce qui offre une grande flexibilité.

Déclaration des objets

Pour déclarer un objet il faut utiliser la méthode statique register. Cette méthode prend en paramètres :

  • un nom ;
  • une fonction lambda (ou fermeture) qui instancie l'objet ;
  • un booléen qui permet de déclarer l'instance comme unique (singleton).
IoC::register( 'i18n', function() {
    $locale = IoC::resolve( 'locale' );
    $i18n = new I18n( $locale );
    return $i18n;
}, true );

Résolution d'objet

La méthode statique resolve retourne une instance d'un objet d'après son nom, en appelant la fonction lambda d'instanciation. Si l'instance est déclarée comme unique, elle vérifie si l'objet a été préalablement créé et le retourne s'il existe. Sinon, il est créé via la fonction lambda d'instanciation.

$i18n = IoC::resolve( 'i18n' );

Fichier de configuration

Les objets sont déclarés dans le fichier de configuration config/dependencies.php.

Le fichier de configuration par défaut de Bluebird contient les définitions de nombreux objets de base nécessaires au fonctionnement d'une application.