16

Sto cercando di capire quando dovrei usare un contenitore contro le dipendenze di iniezione manuale. Se ho un'applicazione che utilizza un'interfaccia 1-2 e ha solo 1-2 implementazioni concrete per ogni interfaccia, mi prendo in considerazione solo la gestione di me stesso.Quando utilizzare un contenitore IOC?

Se ho una piccola applicazione che utilizza 2-3 interfacce e ogni interfaccia ha 2-3 implementazioni concrete, dovrei utilizzare un contenitore in piena regola? Sarebbe sufficiente qualcosa di semplice come this?

Fondamentalmente sto cercando di capire quando è opportuno gestire manualmente queste dipendenze, quando (o se) dovrei usare qualcosa di semplice come sopra, e quando usare un contenitore IOC come Ninject, Windsor, ecc ... Potrebbe non essere appropriato inserire un numero su qualcosa di simile, ma come posso dire che è ora di usare un container IOC?

+0

http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code –

+0

Non sto chiedendo perché dovrei usare uno, sto chiedendo quando dovrei usarne uno. Sono già consapevole dei vantaggi, ma non sono sicuro di quando è il momento giusto per usarne uno. – nivlam

risposta

14

La cosa importante da realizzare qui è che è possibile (e dovrebbe) scrivere il proprio codice in un modo DI-friendly, but container-agnostic.

Ciò significa che è necessario sempre sospingere la composizione delle dipendenze in un punto in cui non è possibile ritardarla ulteriormente. Questo è chiamato Composition Root e viene spesso inserito vicino al punto di ingresso dell'applicazione.

Se si progetta l'applicazione in questo modo, la scelta del contenitore DI (o nessun contenitore DI) ruota attorno a un singolo punto dell'applicazione e è possibile modificare rapidamente la strategia.

È possibile scegliere di utilizzare Poor Man DI se hai solo un paio di dipendenze, oppure si può scegliere di utilizzare una vera e DI Container. Utilizzato in questo modo, non avrai alcuna dipendenza da alcun particolare contenitore DI, quindi la scelta diventa meno importante in termini di manutenibilità.

Un contenitore DI consente di gestire la complessità, compresa la durata dell'oggetto. Usato come descritto qui, non fa nulla che non potresti scrivere in mano, ma lo fa meglio e più sinteticamente. In quanto tale, la mia soglia per quando iniziare a utilizzare un contenitore DI sarebbe molto bassa.

Vorrei iniziare a utilizzare un contenitore DI una volta che ho superato alcune dipendenze. Most of them are pretty easy to get started with anyway.


Aggiornamento: My November 2012 answer to that question.