Use Your Singletons Wisely: Ten Years Later

I think you did just show that Dependency Injection makes use of the Singleton Pattern unnecessary. Suppose we discovered or decided that we want to have only one instance of the C class, shared across multiple classes. The "solution" is simple, and you already did it:

C c = new C();

In the Client code, you create one instance of the C class, and then you use it wherever you need it. It's not a problem to enable other classes to use it, as you can pass it into their constructors as you create those classes.

You see, the Singleton Pattern solves the problem of how a class can gain access to "the single standard instance" of something it needs. But when classes have everything they need "handed" to them, through their constructors, then you don't actually have the problem any more. So you don't need the Singleton Pattern, to solve it. You solved the problem using Dependency Injection.