Dependency Injection is one of the most misunderstood concepts in computer programming.
This is because the Dependency Injection borders are quite blurry and they could overlap with other object-oriented programming concepts.
We'll start with a uniform definition of the DI so that we can proceed without confusion.