2012-02-16 12 views
10

He estado usando el concepto de DI desde hace un tiempo, pero ahora estoy empezando a utilizar un contenedor de inyección de dependencia (DIC). Aunque una cosa no está clara para mí.Cómo mantener una instancia de un Contenedor de inyección de dependencia (PHP)

En mi DIC guardo (por ejemplo) un objeto Config y un objeto Request. Entiendo que estos objetos en un ámbito de solicitud (la misma instancia se usa cada vez que lo solicita desde este contenedor) siguen siendo los mismos. Pero esto solo sucede cuando reutilizo la misma instancia del DIC.

¿Cómo debo pasar el DIC en mis clases? Digamos que quiero usarlo en mi clase de enrutador, ¿necesito pasarlo en el constructor de mi clase de enrutador? Pero la clase Router se crea en otra clase, y esa también debería tener este objeto DIC.

¿O debería crear una singleton de este DIC?

Respuesta

7

No vaya por la ruta de Singleton. Efectivamente toma todas las ventajas que el DIC le brinda. Usualmente pasas el contenedor en constructor, o como un parámetro de método cuando corresponde.

Sí, esto requiere que haga un esfuerzo extra al pasar el objeto contenedor alrededor de su aplicación, pero como resultado, su código refleja bien que estas clases dependen de que este objeto funcione.

+1

La mejor manera es crear el DIC en la rutina de arranque de mi aplicación y pasarla donde sea necesario? Parece un buen enfoque, pero de hecho necesito poner un esfuerzo extra en eso. (Mis clases también serán muy comprobables) – jayv

+0

Para un contenedor que se utiliza en toda la aplicación, podría ser una buena idea. Encapsula efectivamente recursos/objetos, que de otro modo tendrían que estar expuestos como variables globales o Singletons. Recuerde que también puede tener contenedores DI 'locales', con un alcance de uso limitado. Esos deben ser creados dentro del alcance en el que se requieren. – Mchl

+0

¿Puede darme un breve ejemplo práctico del uso limitado del alcance? – jayv

Cuestiones relacionadas