но при этом усложняет код
Не соглашусь. DI предполагает, что код разбит на модули. Использование независимых модулей для различных задач упрощает и код и будущую его поддержку. А сложный код при желании всегда можно написать, и DI тут не виновато.
По вопросу - используем, в том числе и по моим решениям. Про пользу тут уже писали, а для нас ещё важно, к примеру, что бы на сервере Continous Integration изменение одной библиотеки не привело к пересборке полусотни других, зависящих от неё прямо или косвенно.