Чтобы расширить комментарий от @Nkosi, new
должен куда-то звонить. Объекты создаются путем вызова их конструкторов, и внедрение зависимостей этого не меняет. см. ключевые слова new
; но они просто скрыты, а не устранены.
Если вы применяете свой собственный DI, вы сами реализуете композицию root (которая будет заполнена ключевыми словами new
). Ваш метод main
- это как раз то место, где можно реализовать композицию root.
Обратите внимание на преимущество шаблона root композиции в том, что он объединяет создание экземпляров объекта (и, следовательно, new
ключевых слов) в единое место. Если вы думаете о создании объектов как о «единой ответственности», то объединение этой работы в main
сделает вашу кодовую базу более связной.
Никакой шаблон не устранит необходимость new
поднять объекты. Внедряя зависимости через конструкторы, вы правильно выполняете DI.