- "A 25-dollar term for a 5-cent concept" - James Shore
- Technique whereby the dependencies of an object are provided to it, rather than the constructing them or accessing them through another object.
- When object A requires (depends on) the presence or functionality of object B, object B is a dependency of object A.
- Primary gain is making testing easier.
- Encourages loose coupling.
- Puts an object's dependencies front and center, easier to see.
- Changes to the application are (potentially) easier. Fewer breaking code changes.
- It can be hard to understand sometimes.
- Dependency injection isn't always mature in all languages/frameworks.