basic concept of dependency injection