Service Container Laravel : binding, singleton, alias et injection de dependances

Maitrisez le Service Container Laravel. Apprenez binding, singleton, alias et contextual binding pour gerer vos dependances efficacement.

Mahmoud DEVO
Mahmoud DEVO
December 28, 2025 2 min read
Service Container Laravel : binding, singleton, alias et injection de dependances
Table of Contents

Introduction

Dans ce tutoriel, nous allons explorer les capacités avancées de la containerisation dans Laravel. La gestion de dépendances est un concept fondamental en programmation orientée objet, et Laravel fournit une solution robuste pour gérer ces dépendances. Nous allons aborder les concepts clés de binding, singleton, alias, et contextual binding, ainsi que leur application dans la résolution des dépendances.

Binding

Le binding est le processus consistant à lier un nom de classe (ou une interface) à une instance spécifique ou à un type de ressource. Cela permet de définir comment la container doit résoudre les instances d’une classe donnée.

// Exemple 11-5 : Basic container binding

use App\Logger;

public function register()
{
    $this->app->bind(Logger::class, function ($app) {
        return new Logger('\log\path\here', 'error');
    });
}

Dans cet exemple, nous utilisons la méthode bind() de la container pour lier le nom de classe Logger à une instance spécifique de logger. Le second paramètre est une closure qui sera exécutée chaque fois que la container sera sollicitée pour résoudre une instance de Logger.

Singleton

Si vous souhaitez que l’instance créée par le binding soit persistante, vous pouvez utiliser la méthode singleton() de la container.

// Exemple 11-7 : Binding a singleton to the container

use App\Logger;

public function register()
{
    $this->app->singleton(Logger::class, function () {
        return new Logger('\log\path\here', 'error');
    });
}

Dans cet exemple, nous utilisons la méthode singleton() pour lier le nom de classe Logger à une instance persistante de logger.

Alias et instances existantes

Vous pouvez également utiliser les méthodes alias() et instance() pour lier des noms de classes ou des interfaces à des instances existantes ou à d’autres types de ressources.

// Exemple 11-9 : Aliasing classes and strings

use App\Logger;
use App\FirstLogger;

public function register()
{
    $this->app->bind(Logger::class, FirstLogger::class);
    $this->app->alias(FirstLogger::class, 'log');
}

Dans cet exemple, nous utilisons les méthodes bind() et alias() pour lier le nom de classe Logger à une instance existante de FirstLogger, ainsi que pour créer un alias pour la classe FirstLogger.

Contextual binding

Vous pouvez également utiliser la méthode when() pour spécifier des règles de contextualisation pour les bindings.

// Exemple 11-11 : Contextual binding

use App\FileWrangler;
use App\Logger;

public function register()
{
    $this->app->when(FileWrangler::class)
        ->needs(Logger::class)
        ->give(Loggers\Syslog::class);
}

Dans cet exemple, nous utilisons la méthode when() pour spécifier que la classe FileWrangler doit utiliser l’instance de logger définie par Loggers\Syslog.

Injection de dépendances dans les contrôleurs

Laravel gère également l’injection de dépendances dans les contrôleurs. Vous pouvez simplement typehint les dépendances dans le constructeur du contrôleur.

// Exemple 11-12 : Injecting dependencies into a controller

use App\Controller;
use App\Logger;

class MyController extends Controller
{
    protected $logger;

    public function __construct(Logger $logger)
    {
        $this->logger = $logger;
    }

    public function index()
    {
        // Utilisez l'instance de logger dans votre méthode index.
    }
}

Dans cet exemple, nous utilisons la méthode __construct() pour injecter une instance de logger dans le contrôleur.

Conclusion

Dans ce tutoriel, nous avons exploré les capacités avancées de la containerisation dans Laravel. Nous avons abordé les concepts clés de binding, singleton, alias, et contextual binding, ainsi que leur application dans la résolution des dépendances. Vous avez maintenant une meilleure compréhension de comment gérer les dépendances dans votre application Laravel.

Références

Nous espérons que ce tutoriel vous aura été utile. Si vous avez des questions ou des commentaires, n’hésitez pas à les partager avec nous !

Advertisement

In-Article Ad

Dev Mode

Share this article

Mahmoud DEVO

Mahmoud DEVO

Senior Full-Stack Developer

I'm a passionate full-stack developer with 10+ years of experience building scalable web applications. I write about Vue.js, Node.js, PostgreSQL, and modern DevOps practices.

Enjoyed this article?

Subscribe to get more tech content delivered to your inbox.

Related Articles