Не полагайся на порядок вызовов конструкторов, инициализаторов периферии и тд - легко словить грабли в дальнейшем.
У меня все сервисы имеют три стадии инициализации:
1) Собственно сами конструкторы классов. В них я предполагаю, что класс автономен, соответственно и не обращаюсь к другим классам и ресурсам. Здесь же инициализируется периферия (естественно, два класса не могут юзать одну и ту же периферию)
2) Стадия Init - здесь уже налаживаются связи между классами (к этому моменту все необходимые объекты уже созданы)
3) Стадия Run - запускается таски, разрешаются прерывания от периферии и тд - в общем, нормальная работа приложения
объекты глобальные, соответственно создаются до main. А в main я уже вызываю init и run.
Суть в чем - не полагайся, что кто-то что-то сделал заранее