Как вы структурируете создание объектов - это отдельная проблема, чем API , которую он предоставляет.
Закон Деметры говорит что-то об API классов, а не о том, как они построены, поэтому я не вижу конфликта между Конструкторской инъекцией и Законом Деметры.
Тем не менее, как только вы решите использовать Dependency Injection, вы должны быть осторожны, чтобы избежать двусмысленности , когда дело доходит до создания объектов. Если вы продолжаете предлагать конструктор без параметров или метод статической фабрики, люди могут использовать его вместо того, чтобы позволить внешнему вызывающему объекту составить иерархию зависимостей.
Каждый раз, когда разработчики случайно нарушают иерархию зависимостей, используя фабричный метод (или конструктор без параметров), они вводят тесную связь в этой точке. Когда вы решите использовать DI, вы сможете наилучшим образом извлечь выгоду, если будете делать это последовательно.