/ / Come gestite le dipendenze "profonde" con IoC e DI? - c #, iniezione dipendenza, unità-contenitore, ioc-container

Come gestisci le dipendenze "profonde" con IoC e DI? - c #, iniezione dipendenza, unità-contenitore, ioc-container

Sono nuovo di IoC e sto giocando con Unity. Diciamo "hai una soluzione con progetti" n "e vuoi usare Unity per registrare e risolvere le dipendenze. Diciamo che la tua root di composizione è in progetto un. Supponiamo che tu abbia i seguenti progetti nella soluzione.

un B c d

Diciamo un dipende da qualcosa in B, B dipende da qualcosa in c e c dipende da qualcosa in d

Ho visto come è possibile utilizzare l'iniezione del costruttore per risolvere il problema a => b dipendenza ma sono bloccato su come b "s dipendenza da c può essere risolto senza accesso al contenitore che è stato configurato e creato nel progetto un.

Qual è l'approccio per risolvere le dipendenze nidificate? C'è una discussione / blog / esempio che affronti la risoluzione di profonde dipendenze?

risposte:

7 per risposta № 1

La tua root di composizione dovrebbe creare e distribuire tutte le tue dipendenze, comprese quelle annidate, quindi ha bisogno di riferimenti a tutti gli assembly rilevanti (a meno che tu non li stia fornendo usando la reflection).

Ad esempio, normalmente crei un'istanza di B (fornendo la sua dipendenza, C) prima di creare un A. Se l'hai fatto "a mano", sarebbe simile a questo:

C c = new C();
B b = new B(c);
A a = new A(b);

Finché si registrano tutti i tipi appropriati, il framework di iniezione delle dipendenze li risolverà per te.

Per un grande articolo sull'argomento, vedi Miško Hevery "s"Mito dell'iniezione delle dipendenze: passaggio di riferimento".