El contenedor de inyección de dependencias de Laravel (IOC container) es básicamente la espina dorsal de este maravilloso framework de PHP, por lo tanto es un tema que debes conocer a fondo si trabajas con Laravel.
El contenedor de servicios de Laravel es una poderosa herramienta para administrar dependencias de clases y realizar inyecciones de dependencia. La inyección de dependencia es una frase sofisticada que básicamente significa esto: las dependencias de clase se “inyectan” en la clase a través del constructor o, en algunos casos, de los métodos “setter”.
source: https://laravel.com/docs/5.5/container
Por ejemplo, utilizando el IOC puedes “inyectar” clases (dependencias) a través del constructor de un controlador; al momento que dicho controlador sea ejecutado el IOC se encargará de resolver dicha instancia.
<?php
namespace App\Http\Controllers;
use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
protected $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
}
En este caso Laravel será capaz de instanciar la clase UserRepository
y asignará a la variable $users
.
¿Eso es todo?
Bueno, aunque esto ya es demasiado, no es todo. Estas son algunas de las cosas que puedes hacer con el Contenedor de Inyección de Dependencias de Laravel:
- Atar y resolver clases
- Autowiring (instanciar una clase sin recibir instrucciones)
- Enlazar clases de forma manual
- Enlazar un “singleton”
- Agregar un alias a una clase
- Uso de inyección de dependencias en métodos
- Instanciar una clase a través de una interfaz
Puedes ver estos conceptos con más detalle en este artículo:
Contenedores de inyección de dependencias a profundidad
Si quieres dominar por completo este tema, que te parecería aprender cómo crear un contenedor de inyección de dependencias sin ayuda de ningún framework.
Aprende desde cero el concepto y la implementación del patrón de inyección de dependencias creando tu propio contenedor de inyección de dependencias, similar al que tiene Laravel.