switched to using reflectedType, moved most of reusable code into Injector