Définir un singleton Laravel

Un singleton est une classe qui ne peux être instanciée qu'une fois dans une application donnée.

C'est utile, par exemple, lorsque l'on veut partager une information ou un état entre plusieurs partie de notre code. En revanche, cela rend le code plus difficile à suivre car son éxecution dépend de l'ordre d'éxécution d'autres parties du code.

Par défaut, le conteneur de dépendances de laravel injecte une nouvelle isntance a chaque besoin justement pour prévenir ces problémes d'interdépendances entre des parties arbitraires du code.

La déclaration d'un singleton se fait dans un ServiceProvider, avec la méthode singleton.

Par exemple la définition peux se faire avec ce code:

$this->app->singleton(Interface::class, ClassAInstancier::class);

Cette méthode définie dans l'IoC de laravel que toutes les dépendances a Interface, devront être résolues par une seule et même instance de ClassAInstancer.

Si votre classe n'implémente pas d'interface, vous pouvez réutiliser ClassAInstancer::class dans les deux paramétres.

Enfin, si votre provider utilise la méthode bind pour définir des dépendances, vous pouvez directement remplacer bind par singleton sans changer aucun des paramétres. Le fonctionnement restera le même à l'exception que l'instance ne sera résolue que lors du premier appel a cette dépendance.

Qu'avez vous pensé de cet article?