Mi despachador está "seleccionando" el controlador correcto; luego se crea la instancia del Controlador (DependencyInjectionContainer se pasa al constructor del Controlador); a continuación, llamar al método de algún controlador ...MVC, DI (inyección de dependencia) y creación de instancia de modelo desde el controlador
class UserController extends Controller
{
public function __construct(DependencyInjectionContainer $injection) {
$this->container = $injection;
}
public function detailsAction() {
...
}
}
DependencyInjectionContainer contiene adaptador DB objeto, objeto de configuración, etc. Ahora vamos a ver lo que() método contiene detailsAction ...
public function detailsAction() {
$model = new UserModel();
$model->getDetails(12345);
}
Como se ve I' m creando una nueva instancia de UserModel y llamando a los métodos getDetails. El método getDetails() del modelo debe conectarse a db para obtener información sobre el usuario. Para conectarse a DB, UserModel debe poder acceder al adaptador DB.
¿Cuál es la forma correcta de pasar DependencyInjectionContainer al UserModel? Creo que de esta manera está mal ...
public function detailsAction() {
$model = new UserModel($this->container);
$model->getDetails(12345);
}
Esto es esencialmente un duplicado de esto: http://stackoverflow.com/questions/2386487/is-it-better-to-create-a-singleton-to-access-unity-container-or-pass-it -trough-t –
Acabo de leer esto http://stackoverflow.com/questions/2386487/is-it-better-to-create-a-singleton-to-access-unity-container-or-pass-it -through-t y este http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2/1475861#1475861 pero todavía estoy confundido. Entonces, ¿debería pasar DependencyInjectionObject a cualquier instancia nueva por cadena (de una a otra)? – Kirzilla
@Mark Seemann Wow, ¡has escrito todo el libro sobre Dependency Injection! Maldición, DI me parece cada vez más difícil con cada pregunta :) – Kirzilla