Мммм... все инициализируется on demand и асинхронно. То есть сервисы инициализируются по требованию, если вы иньектите их в контроллеры то естественно они инициализируются раньше контроллера (так как это их зависимости). Фильтры инициализируются после компиляции шаблона, и только те что там используются.
run запускается первым, перед run еще есть фаза конфигурации.
С учетом всех сложностей вы просто не должны завязывать приложение на это все дело (и это хорошая идея). У вас есть фаза конфигурации где можно еще что-то сделать с контейнером зависимостей например, сконфигурить сервисы, и потом все... только run выполняется первым (причем если он требует сервисы сначала инициализируются они) потом представьте что вы не знаете порядок и т.д.