Dependency Injection is a design pattern in which an object receives the services or collaborators it needs from outside itself.
It can improve testability, configurability, and separation of concerns by reducing hard-coded dependencies.
Related concepts include Source Code.