2012-02-16 10 views
10

Ho utilizzato il concetto DI per un po 'di tempo, ma ora sto iniziando a utilizzare un contenitore DIC (dependency injection container). Anche se una cosa non è chiara per me.Come mantenere un'istanza di un contenitore di iniezione delle dipendenze (PHP)

Nel mio DIC tengo (ad esempio) un oggetto Config e un oggetto Request. Capisco che questi oggetti in un ambito di richiesta (la stessa istanza viene utilizzata ogni volta che lo si richiede da questo contenitore) rimangono gli stessi. Ma questo succede solo quando ri-utilizzo la stessa istanza del DIC.

Come devo passare il DIC attorno alle mie classi? Dite che voglio usarlo nella mia classe Router, devo passarlo nel costruttore della mia classe Router? Ma la classe Router è creata in un'altra classe, e anche quella dovrebbe avere già questo oggetto DIC.

Oppure devo creare un singleton di questo DIC?

risposta

7

Non seguire la rotta Singleton. Prende efficacemente tutti i vantaggi che DIC ti offre. Di solito si passa il contenitore nel costruttore o come parametro del metodo, ove applicabile.

Sì, ciò richiede uno sforzo supplementare per passare l'oggetto contenitore attorno all'applicazione, ma come risultato il codice riflette bene che queste classi dipendono da questo oggetto per funzionare.

+1

Il modo migliore è creare il DIC nel bootstrap della mia applicazione e trasferirlo dove necessario? Sembra un buon approccio, ma in effetti ho bisogno di fare qualche sforzo in più. (Le mie classi saranno anche molto verificabili) – jayv

+0

Per un contenitore che viene utilizzato attraverso l'intera applicazione che potrebbe essere una buona idea. Incapsula efficacemente risorse/oggetti, che altrimenti avrebbero bisogno di essere esposti come variabili globali o Singletons. Ricorda che puoi anche avere contenitori DI 'locali', con un ambito di utilizzo limitato. Quelli dovrebbero essere creati internamente nello scopo in cui sono richiesti. – Mchl

+0

Potete darmi un breve esempio pratico dell'uso dell'ambito limitato? – jayv

Problemi correlati