I'm currently re-factoring a large application with quite a bit of spaghetti legacy code into something more structured and easy to maintain, and most importantly, testable. I can see that obviously injecting classes dependencies into them as opposed to mixing object creation with business logic makes writing unit tests much easier.
I've read comments to the effect of "using dependency injection improperly causes more problems than it solves." What exactly does that mean? For such sophisticated verbiage, dependency injection seems like a pretty simple concept. How do you abuse the idea of sending dependencies in through a constructor rather than instantiating them within the dependent class? Why would the latter ever be preferable?
All I can see right now is that it makes isolating functionality to write tests and mocking objects extremely easy. It also seems to be making it ridiculously obvious when a class has too many responsibilities and points directly at classes that need to be refactored. Am I getting carried away if I'm avoiding the use of the new keyword anywhere other than my DI container (with the exception of core PHP classes)?