Одне слово: Ні.
Більше слів: Введення залежності в це саме те. Це засіб, за допомогою якого ви вводите ресурси, від яких залежить інший об'єкт, але не повинні знати складні деталі з іншого джерела. Використання DI не означає, що НІЧОГО у вашій програмі не повинно знати, як створити будь-який інший об’єкт; Насправді я вважаю, що нетривіальній програмі дуже неможливо повністю уникати "нового" ключового слова (або на основі рефлексії). Однак, DI означає, що об'єкти, які не повинні знати, як створювати складні об'єкти, які потребують безлічі залежностей, які тісно з'єднають цей об'єкт з іншим, не повинні мати усі ці знання про тісне з'єднання.
Я вивчив би дві основні теорії дизайну програмного забезпечення для O / O, GRASP та SOLID. GRASP скаже вам вивчити призначення об'єкта і запитаєте себе: "Чи повинен цей об'єкт нести відповідальність за створення нових об'єктів такого типу? Чи це частина" опису завдання "цього об'єкта?" SOLID йде на крок далі: "S" означає "Принцип єдиної відповідальності", який однозначно стверджує, що об'єкт повинен мати одну роботу, і він повинен бути єдиним об'єктом в програмі, який виконує цю конкретну роботу.
Отже, GRASP, як правило, спонукає вас переглянути ваші існуючі класи, для яких створюються ці нові об’єкти, і знайти той, для якого завдання створення цього об'єкта відповідає тому, що об’єкт вже робить, зберігаючи бажаний рівень "згуртованості". SOLID скаже вам, що єдність є ключовою; завдання по створенню цих об'єктів має бути надано якійсь фабриці, яку слід вводити у ваш клас. Я думаю, ви побачите, оскільки складність вашої програми продовжує зростати, що дотримання будь-якої з цих методологій із готовністю до рефакторації призведе до дуже подібних архітектур.