Dependency Injection using Inversion of Control (IoC)