Inversion of Control è un concetto generale in cui il normale flusso di controllo è "invertito" in qualche modo.
Per flusso "normale", intendo un flusso di applicazioni batch tradizionale: il codice viene eseguito dall'inizio alla fine, creando risorse, richiedendo dati e fornendo output. Il flusso di controllo è dettato dall'applicazione stessa, che richiama le librerie e le strutture di sistema secondo necessità. Qualsiasi inversione di questo - dove le librerie piuttosto che l'applicazione (usando questi termini un po 'vagamente) guidano il flusso di controllo - è in qualche modo inversione di controllo.
Uno degli esempi più comuni di IoC è un ciclo di eventi. In un ciclo di eventi, il toolkit GUI (o il sistema operativo) ha il controllo, richiama l'applicazione per gestire gli eventi e l'input di processo. Il normale flusso - richiesta di input e amp; elaborandolo - è invertito in modo che il processore di input guidi l'applicazione, piuttosto che il contrario.
L'iniezione di dipendenza è un uso specifico di Inversion of Control, in cui l'inversione del controllo viene applicata alla selezione e all'assegnazione delle dipendenze. Anziché disporre di un componente che istanzia i componenti secondari richiesti, il codice di creazione (codice dell'applicazione, manualmente o contenitore DI) crea un'istanza dei sottocomponenti richiesti e li inietta nel componente.