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.