Una parola: no.
Altre parole: l'iniezione di dipendenza è esattamente quella. È un mezzo attraverso il quale si introducono risorse da cui dipende un altro oggetto, ma non si dovrebbero conoscere i dettagli intricati di, da un'altra fonte. Usare DI non significa che NULLA nel tuo programma dovrebbe sapere come creare qualsiasi altro oggetto; in effetti, ritengo che sia altamente impossibile per un programma non banale evitare completamente la parola chiave "nuova" (o le alternative basate sulla riflessione). Tuttavia, DI vuol dire che gli oggetti che NON DEVONO sapere come creare oggetti complessi che richiedono molte dipendenze che accoppieranno strettamente questo oggetto all'altro, non dovrebbero avere tutte queste conoscenze strettamente accoppiate.
Vorrei studiare le due principali teorie sulla progettazione di software O / O, GRASP e SOLID. GRASP ti dirà di studiare lo scopo dell'oggetto e chiediti: "Questo oggetto dovrebbe essere responsabile della creazione di nuovi oggetti di questo altro tipo? Questa parte della 'descrizione del lavoro' di questo oggetto?" SOLID fa un passo in più: la "S" sta per "Principio di singola responsabilità", che afferma in modo inequivocabile che un oggetto dovrebbe avere un lavoro, e dovrebbe essere l'unico oggetto nel programma che fa quel lavoro specifico.
Quindi, GRASP generalmente ti incoraggia a guardare attraverso le tue classi esistenti per cui creare questi nuovi oggetti, e trovare quello per cui il compito di creare questo oggetto si adatta a quello che l'oggetto già fa, mantenendo il livello desiderato di "coesione" ". SOLID ti dirà che la coesione è la chiave; il compito di creare questi oggetti dovrebbe essere dato ad una fabbrica che dovrebbe essere iniettata nella tua classe. Penso che troverai, mentre la complessità del tuo programma continua a crescere, che l'aderenza a una di queste metodologie, con la volontà di refactoring, si tradurrà in architetture molto simili.