Separate configurations can be written for different situations that require different implementations of components. This includes, but is not limited to, testing.[23] Because dependency injection does not require any change in code behavior it can be applied to legacy code as a refactoring.