Too Long; Didn't Read
Dependency injection is a simple concept that aims to decouple components of your software and ease integration and testing. It does so by asking for sub-components instead of creating them. Inversion of control (IoC) is also commonly used along with dependency injection. This pattern aims to avoid asking for implementations but rather interfaces while injecting dependencies. It enables you to control the instance creation from your entry point.