lunedì 18 giugno 2012

Dependency Injection

"E' un pattern che permette di eseguire la scelta di un componente a run-time invece che nella compilazione. Un tipico utilizzo è quello del caricamento dinamico di un plugin o per effettuare il caricamento di oggetti sostitutivi in ambiente di test al posto di quelli che verrebbero caricati nell'ambiente di produzione".

E questa è più o meno la definizione. Vediamo un esempio.


Supponiamo di avere una classe Auto e una classe derivata Fiat.


class AutoSelector {
        Auto fiatAuto = null;
        public AutoSelector() {}



il reference fiatAuto è la dependency (dipendenza)



class AutoSelector {
        Auto fiatAuto = null;
        public AutoSelector(Fiat fiat) 
        {
             fiatAuto=fiat;
         }
}


ecco che abbiamo effettuato una dependency injection sull'istanza della variabile fiatAuto.


Abbiamo creato un forte accoppiamento tra il nostro codice e la classe Fiat...  E se noi volessi creare un sistema per scegliere quale classe di auto utilizzare?
La soluzione è accoppiare la Dependency Injection al pattern Factory e utilizzare un file di config. Quindi utilizzare un componente esterno che tramite un file di config va a costruire gli oggetti e le dipendenze.