This can hinder use of IDE automation, such as "find references", "show call hierarchy" and safe refactorings.[31] Dependency injection typically requires more upfront development effort since one can not summon into being something right when and where it is needed but must ask that it be injected and then ensure that it has been injected.[32] Dependency injection forces complexity to move out of classes and into the linkages between classes which might not always be desirable or easily managed.[33] Dependency injection can encourage dependence on a dependency injection framework.[33][34][35]