Короче в жизни сервера есть три принципиальных стадии.
1. Подняться
2. Работать
3. Сдохнуть
Почти вся твоя безнис логека написана в 2.
Однако 1 - это тоже крайне важное говно.
Подниматься нужно быстро, сообщать обо всех проблемах, инициализировать всё, что нужно для работы, чтобы все вокруг знали.
И если в 2 мы можем считать, что у нас есть куча модулей, зависящих в принципе произвольным графом, то инициализация и грейсфул шатдауны должны быть строго ацикличны.
Каждая стадия инициализации - это какое-то возможно эффектфул асинхронное и т.д. и т.п. действие.
Пока твоё приложение на уровне петпрожекта хелловорлда инициализацию можно написать руками в одном фор компрехеншене.
В случае крупных приложений требуется модульно, т.е. независимо друг от друга описываеть механизмы инициализации отдельных компонент, да ещё по возможности, чтобы это можно было переиспользовать в других сервисах.
Это и создаёт проблему автоматического разрешения сценария инициализации и шатдауна, которую решает хороший диай.
Диай, который просто вызывает конструкторы и кидает референсы друг другу - конечно не нужен.