1. SOLID, а конкретно буква D - Dependency inversion principle, который гласит что 'When following this principle, the conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are reversed, thus rendering high-level modules independent of the low-level module implementation details. ', одно из следствий - если тебе в коде нужна зависимость, не нужно создавать её руками, проси чтобы её тебе передали сверху, иначе код будет супер-связный (это плохо)
2. Когда ты пишеь по SOLID и выносишь в конструктор все эти зависимости которые тебе нужны, ты просто офигеешь в продакшене создавать такие классы руками, var a = new A(new B(new C()), new D(), new E()...
3. Код написанный по SOLID проще тестить, т.к. легко замокать все зависимости
4. Это дает некоторую гибкость например в настройке окружения для разных тенантов - ты можешь в одном месте в контейнере, подсовывать разные реализации
5. Чисто визуально, проще смотреть от чего код зависит, смотришь на конструктор и понимаешь что других зависимостей там нет
6. Контейнер может управлять процессом создания объектов - нужно ли всегда один и тот же возвращать или нужно каждый раз по новой создавать