O mais importante, para mim, é tornar mais fácil seguir o Princípio da Responsabilidade Única .
DI / IoC torna simples para mim gerenciar dependências entre objetos. Por sua vez, isso facilita para mim a funcionalidade coerente em seu próprio contrato (interface). Como resultado, meu código tem sido muito mais modularizado desde que eu aprendi sobre DI / IoC.
Outro resultado disso é que eu posso ver muito mais facilmente meu caminho até um design que suporte o Princípio Aberto-Fechado . Essa é uma das técnicas inspiradoras de confiança (perdendo apenas para testes automatizados). Eu duvido que eu poderia adotar as virtudes do Princípio Aberto-Fechado o suficiente.
DI / IoC é uma das poucas coisas na minha carreira de programação que tem sido uma "mudança de jogo". Existe uma lacuna enorme na qualidade entre o código que escrevi antes & depois de aprender DI / IoC. Deixe-me enfatizar isso um pouco mais. Melhoria ENORME da qualidade do código.