Qual è la differenza tra DI e IoC? [duplicare]

13

Sono nuovo di Inversion of Control, Dependency Injection e tutto ciò che riguarda queste cose, quindi scusami se non sono specifico nella mia domanda: c'è qualche pezzo magico di codice, una buona spiegazione o un link, quindi Posso finalmente distinguere i concetti?

Penso davvero che l'uso di Dependency Injection significhi già usare Inversion of Control, ma esiste un modo per usare Inversion of Control senza usare Dependency Injection?

Ho già letto gli articoli di Martin Fowler ma trovo ancora i concetti molto confusi.

    
posta Daniel Conde Marin 23.01.2012 - 03:15
fonte

2 risposte

9

Iniezione di dipendenza è un modo in cui spesso viene implementata Inversion of Control, ma ce ne sono altri. Dall'articolo Wikipedia Inversion of control :

Implementation techniques are influenced by the computer language used.

In Java there are six basic techniques to implement Inversion of Control. These are:

  1. using a factory pattern
  2. using a service locator pattern
  3. using a constructor injection
  4. using a setter injection
  5. using an interface injection
  6. using a contextualized lookup

Constructor, setter, and interface injection are all aspects of Dependency injection.

    
risposta data 23.01.2012 - 03:29
fonte
6

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.

    
risposta data 23.01.2012 - 04:00
fonte

Leggi altre domande sui tag