In many applications and development teams, dependency injection (or DI) with inversion of control (or IoC) has become standard practice for creating better software design. It allows for loosely coupled modules, better unit tests (or even TDD) and a better implementation of SOLID principles.
Over