complete dependency injection