refactoring & add injector