Dependency Injection and Inversion of Control