A ver, son dos formas de hacer lo mismo, la forma correcta y elegante es utilizar DI, lo mas sencillo es utilizar Registry.
Te propuse Pimple porque es una clase bien sencilla y te puede servir de reemplazo para tu Registry con unos pocos cambios:
Creas el container con las dependencias
Código PHP:
Ver originalclass Container extends Pimple
{
public function __construct()
{
$this['product_class'] = 'Application\Entity\Product';
$this['category_class'] = 'Application\Entity\Category';
$this['entity_manager'] = $container->share(function ($c) {
return EntityManager::create($c['db_params'], $c['entity_manager_config']);
});
$this['product_manager'] = $container->share(function ($c) {
return new ProductManager($c['entity_manager'], $c['product_class']);
});
$this['category_manager'] = $container->share(function ($c) {
return new CategoryManager($c['entity_manager'], $c['category_class']);
});
}
}
Reemplazas tu Registry por el Container
Código PHP:
Ver original...
$container = new Container();
$controlador = new $controlador($peticion, $container);
...
Utilizas el DiC
Código PHP:
Ver originalpublic function index()
{
$products = $this->container->get('product_manager')->findAll();
}
de todas formas si te lía quédate con el Registry, no es lo mas limpio pero te va a funcionar, la idea es que veas las opciones que tienes tu luego utilizas lo que creas mas conveniente.
Con respecto a Singleton, tiene los mismos vicios de Registry y mas, puedes buscar en el foro o googlear que hay bastante material sobre el tema.
Cita: Mañana le echo un vistazo al dependency injection.
Échale un ojo al link que te deje en el post anterior, es simple y claro.
Saludos.