Dependency Injection For Mere Humans

What’s the difference between service location and dependency injection? Why is this dependency injection thing such a big deal anyway, and how do you use it correctly? I’ll answer these questions and more, including real-world examples of refactoring an application toward the more explicit, testable, closer-to-SOLID applications.