2009-06-04 3 views
18

Stavo leggendo su Injection by Hand e Ninjection (così come Why use Ninject). Ho incontrato due pezzi di confusione:Quadri dell'iniezione delle dipendenze: perché mi interessa?

  1. L'Inject da tecnica lato sono già familiarità con, ma non ho familiarità con Ninjection, e quindi non sono sicuro di come il programma completo avrebbe funzionato. Forse sarebbe utile fornire un programma completo piuttosto che, come si fa su quella pagina, mostrando un programma suddiviso in pezzi

  2. Non riesco ancora a capire come questo faciliti le cose. Penso che mi manchi qualcosa di importante. Riesco a capire in che modo un'infrastruttura di iniezione sarebbe utile se steste creando un gruppo di iniezioni e poi passando da due grandi gruppi tutti in una volta (questo è utile per il beffardo, tra le altre cose), ma penso che ci sia dell'altro di quello. Ma non sono sicuro di cosa. O forse ho solo bisogno di più esempi del perché questo è eccitante per portare a casa il punto.

+1

Non riesco ancora a capire perché non si vorrebbe iniettare manualmente – Casebash

risposta

6

Quando si iniettano le dipendenze senza un framework DI, si finisce con il codice della freccia in tutta l'applicazione che dice alle classi come creare le proprie dipendenze.

public Contact() 
     : this(new DataGateWay()) 
    { 
    } 

Ma se si utilizza qualcosa come Ninject, tutto il codice freccia è in un punto rendendo più facile cambiare una dipendenza per tutte le classi che lo utilizzano.

internal class ProductionModule : StandardModule 
{ 
    public override void Load() 
    { 
     Bind<IDataGateway>().To<DataGateWay>(); 
    } 
} 
1

Iniezione di dipendenza utilizzando la maggior parte dei framework può essere configurato in fase di esecuzione, senza richiedere una ricompilazione.

+0

Non penso che sia vero: di solito può essere ottimizzato al momento della distribuzione; o in generale, senza ricompilazione. Voglio dire, il cablaggio è fatto durante il runtime, ma di solito è ancora statico. – StaxMan

2

Mi piace molto l'aspetto di autowiring di alcuni framework ... quando non devi preoccuparti di ciò che i tuoi tipi devono essere istanziati.

MODIFICA: Ho letto this article by Ayende @ Rahien. E sostengo davvero il suo punto.

+0

Puoi spiegarlo in modo più dettagliato? – Brian

0

L'iniezione di dipendenza può diventare davvero interessante se si ottiene il codice al punto in cui ci sono pochissime dipendenze nel codice. Alcuni framework di dipendenze per l'iniezione ti permetteranno di definire le tue dipendenze in un file di configurazione. Questo può essere molto utile se hai bisogno di un software veramente flessibile che deve essere cambiato senza modificare il codice. Ad esempio, il software del flusso di lavoro è un candidato ideale per questo tipo di soluzione.

3

Consente di testare facilmente il codice prendendo in giro le interfacce necessarie per un determinato blocco di codice. Consente inoltre di scambiare facilmente le funzionalità senza rompere altre parti del codice.

Si tratta di coesione e accoppiamento.

Probabilmente non vedrete il vantaggio su piccoli progetti, ma una volta superato piccolo diventa davvero evidente quando è necessario apportare modifiche al sistema. È un gioco da ragazzi quando hai usato DI.

+0

+1 per la menzione della coesione e dell'accoppiamento - Penso che sia l'idea centrale dell'uso dell'iniezione di dipendenza - sviluppare componenti altamente coesi ma incoerentemente accoppiati. –

0

L'immissione delle dipendenze è essenziale per Component Driven Development. Quest'ultimo consente di creare applicazioni davvero complesse in modo molto più efficiente e affidabile.

Inoltre, consente di separare i problemi trasversali comuni in modo pulito dall'altro codice (ciò si traduce in un numero di codice più riutilizzabile e flessibile).

Link correlati:

4

ho ancora davvero non capisco come questo rende le cose più facili. Penso che mi manchi qualcosa di importante.

Non sarebbe sarebbe bello se abbiamo avuto solo a sviluppare componenti discreti in cui ogni provvisti di funzionalità distinte potremmo facilmente capire, il riutilizzo e la manutenzione. Dove solo funzionava su componenti.

Ciò che ci impedisce di farlo, è che abbiamo bisogno di qualche infrastruttura che possa in qualche modo combinare e gestire questi componenti in un'applicazione operativa automaticamente. L'infrastruttura che fa questo è a nostra disposizione - una struttura IOC.

Quindi un framework IOC non è su gestione delle dipendenze o test o configurazione. Invece è su gestire la complessità, consentendo di lavorare e pensare solo ai componenti.