GlosarioArquitectura

¿Qué es Service Container?

El Service Container de Laravel es un potente contenedor de inyeccion de dependencias que gestiona las dependencias de las clases y realiza la inyeccion automatica (autowiring) de objetos en toda la aplicacion.

Service Container (Contenedor de servicios)

El Service Container es el nucleo de Laravel. Es responsable de gestionar las dependencias de las clases y de realizar la inyeccion de dependencias automaticamente.

Binding basico

// En un Service Provider
public function register(): void
{
    // Binding simple
    $this->app->bind(PaymentGateway::class, StripeGateway::class);

    // Singleton (una sola instancia)
    $this->app->singleton(CartService::class, function ($app) {
        return new CartService($app->make(PaymentGateway::class));
    });

    // Binding de interfaz a implementacion
    $this->app->bind(
        OrderRepositoryInterface::class,
        EloquentOrderRepository::class
    );
}

Resolucion automatica

Laravel puede resolver automaticamente clases y sus dependencias sin necesidad de configuracion manual gracias a la reflexion de PHP.

class OrderController extends Controller
{
    // Laravel inyecta automaticamente las dependencias
    public function __construct(
        private OrderRepositoryInterface $orders,
        private PaymentGateway $gateway,
    ) {}
}

Resolucion manual

$service = app(PaymentGateway::class);
$service = resolve(PaymentGateway::class);
$service = app()->make(PaymentGateway::class);

El Service Container es fundamental para escribir codigo desacoplado, testeable y que sigue el principio de inversion de dependencias (SOLID). Practicamente todo en Laravel se resuelve a traves del contenedor.