2011-11-04 10 views
12

Ho letto su DI e sembra un concetto abbastanza semplice. Quello che non capisco è il contenitore. Diciamo per un momento che voglio creare il mio contenitore. Verbi come "detect" sono usati e non capisco come il container "rileva" che un nuovo oggetto dipendente sia stato creato e sappia iniettare le sue dipendenze. A me sembra che il contenitore sia una fabbrica glorificata.Contenitore per l'iniezione delle dipendenze? Che cosa fa?

Qualcuno può spiegare come viene effettivamente implementato un container o magari indirizzarmi verso una risorsa?

Grazie!

risposta

14

questo è preso da Windsor documentation

Inversion of Control

Inversion of Control è un principio utilizzato da framework come un modo per consentire agli sviluppatori di estendere il framework o creare applicazioni utilizzando esso. L'idea di base è che il framework sia a conoscenza degli oggetti del programmatore e li invochi.

Questo è l'opposto dell'utilizzo di un'API, in cui il codice dello sviluppatore effettua le invocazioni al codice API. Quindi, i quadri invertono il controllo: non è il codice dello sviluppatore che si occupa, invece il quadro rende le chiamate in base qualche stimolo.

Probabilmente siete stati in situazioni in cui avete sviluppato sotto la luce di questo principio, anche se non ne siete a conoscenza.

Inversion di controllo contenitore

un'inversione di controllo contenitore utilizza il principio sopra descritto (in breve) il gestore di classi. Cioè, la loro creazione, distruzione, durata, configurazione e dipendenze . In questo modo le classi non devono ottenere e configurare le classi da cui dipendono. Questo riduce drasticamente accoppiamento in un sistema e, di conseguenza, semplifica il riutilizzo e controllabilità.

C'è una certa confusione creata da persone che pensano che "Inversion di Control" sia un sinonimo di "Inversion of Control Container". Come affermato da , l'inversione di controllo è un principio più ampio.

Spesso le persone pensano che sia tutto di "iniezione", e trasmesso che questo è lo scopo primario di contenitori CIO. Infatti, "iniezione" è una conseguenza, un mezzo per disaccoppiare, non il primario scopo.

2

Si potrebbe desiderare di leggere questo libro Dependency Injection In .NET ... L'ho già letto e consiglio vivamente di leggerlo. In primo luogo fornisce una spiegazione piacevole e approfondita su DI, quindi mostra codice e schemi sulle applicazioni del mondo reale di DI.

Da questo libro, e in troppe poche parole ...

"DI container is the technology used to support the DI technique" Page 55 
+0

+1 Sembra una buona lettura. Grazie. –

+1

Sì, lo è. Btw Mark Seeman prende attivamente parte allo stackoverflow, puoi raggiungerlo facilmente e chiederglielo direttamente, credo. – renatoargh