use dependency injection