mix IDE M2

Integrated debugger;
Hit F5 and you can step forwards/backwards through execution.

I would perhaps even go as far as letting ApplicationCtx be a member of Extension.
The singleton pattern is often very convenient, but note that (as subtly explained) it hides dependencies and it is very hard to change a singleton to a non-singleton at a later stage if the singleton accessor is widely used and it is also horrible to test code that uses singletons.