add requirement
add dependency injection