Even though we have removed all global calls in our classes, they are likely to retain other hidden dependencies. In particular, we are probably creating new object instances in inappropriate locations, tightly coupling the classes together. These things make it much harder to write tests and to see what the internal dependencies are.

After converting the global calls in a hypothetical ItemsGateway class, we might have something like this:

There are two dependency injection issues here:

The point of dependency injection is to push the dependencies in from the outside, thereby revealing the dependencies in our classes. Using a new keyword inside a class is in opposition to that idea, so we need to work through the codebase to remove that keyword from our non-Factory classes.