refactoring di