In molti articoli in tutto il web i termini Inversione del controllo e dipendenza Principio di inversione sembrano essere confusi e usati come sinonimi (ulteriore confusione è imposta dagli strumenti che sono chiamati "DI-Containers" e "IoC-Containers"). Un articolo di Wikipedia fa un buon lavoro cercando di spiegare che l'IoC non è lo stesso di DI:
inversion of control (IoC) descrive un progetto in cui porzioni scritte personalizzate di un programma per computer ricevono il flusso di controllo da una libreria generica e riutilizzabile
Quindi DIP consiste nel far dipendere i moduli dalle astrazioni piuttosto che dalle implementazioni concrete.
E l'IoC consiste nel dare il controllo del flusso del programma a un modulo separato. E una delle cose che puoi fare con questo modulo è risolvere le dipendenze in fase di esecuzione.
Questa differenza sembra giusta, ma non ho mai visto nessuno menzionare altre applicazioni del principio IoC diverse dalla risoluzione delle dipendenze. La definizione di Wikipedia è piuttosto ampia e sembra che potresti fare molto di più con un modulo che può effettuare chiamate nel tuo codice personalizzato in base alla sua configurazione e ad alcune logiche interne.
Quindi, ecco alcune domande che non riesco ancora a capire:
- Qual è la relazione effettiva tra IoC e DIP? L'IoC è sempre il mezzo per implementare il DIP?
- Perché gli strumenti per la risoluzione delle dipendenze sono chiamati contenitori DI e IoC? Ciò implica che DI e IoC sono la stessa cosa.
Nota : questa domanda non è un duplicato di Qual è la differenza tra DI e IoC , poiché quest'ultimo chiede informazioni sull'iniezione delle dipendenze, non sull'inversione delle dipendenze.