In molti articoli su tutto il web i termini Inversion of Control e Dependency Inversion Principle sembrano essere confusi e usati come sinonimi (ulteriore confusione viene applicata dagli strumenti chiamati "DI-Containers" e "IoC-Containers") ). Un articolo di Wikipedia fa un buon lavoro cercando di spiegare che IoC non è lo stesso di DI:
inversion of control (IoC) describes a design in which custom-written portions of a computer program receive the flow of control from a generic, reusable library
Quindi il DIP si basa sul fatto che i tuoi moduli dipendono da astrazioni piuttosto che concrete implementazioni.
E IoC significa dare il controllo del flusso del programma a un modulo separato. E una delle cose che puoi fare questo modulo è risolvere le dipendenze in fase di runtime.
Questa differenza sembra giusta, ma non ho mai visto nessuno menzionare altre applicazioni del principio IoC diverso dalla risoluzione delle dipendenze. La definizione di Wikipedia è abbastanza ampia e sembra che tu possa fare molto di più con un modulo che può fare 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? IoC serve sempre come mezzo per implementare il DIP?
- Perché gli strumenti per la risoluzione delle dipendenze chiamano 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 , perché quest'ultimo chiede informazioni sull'iniezione di dipendenza, non sull'inversione di dipendenza.