Самое важное для меня - это простота следования принципу Single Responsibility Principle.
DI/IoC упрощает для меня управление зависимостями между объектами. В свою очередь, это облегчает мне разбиение последовательной функциональности на отдельные контракты (интерфейсы). В результате, мой код стал гораздо более модульным с тех пор, как я узнал об DI/IoC.
Другим результатом этого является то, что я могу гораздо легче увидеть свой путь к дизайну, который поддерживает принцип "открыто-закрыто". Это одна из самых внушающих доверие техник (вторая после автоматизированного тестирования). Сомневаюсь, что я могу достаточно убедительно рассказать о достоинствах принципа открытого закрытия.
DI/IoC - одна из немногих вещей в моей карьере программиста, которая "изменила игру". Существует огромный разрыв в качестве кода, который я писал до и после изучения DI/IoC. Позвольте мне подчеркнуть это еще раз. Огромное улучшение качества кода.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: