Все равно получается громоздко, если много зависимостей, все надо регистрировать. Я пришел к подходу самому писать DI контейнер. Структура serviceProvider в которую закидываешь зависимости явно, и методы по инициализации конкретной зависимости. Один метод может вызывать другой. К примеру HttpServer вызывает Repository, Repository вызывает Config. И в main.go достаточно вызывать верхнеуровневую зависимость, которая каскадом инициализирует все нужное, и инициализация будет начинаться с листьев графа. Так же шатдаун будет проходить в обратном порядке. Достаточно просто и удобно. Не нужно регистрировать каждую зависимость
А потом команда с горящей попой ночью чинит прод, потому что синьор написал для маленькой простой подзадачки не бинарный поиск а экспоненциальный алгоритм и все легло
Все равно получается громоздко, если много зависимостей, все надо регистрировать. Я пришел к подходу самому писать DI контейнер. Структура serviceProvider в которую закидываешь зависимости явно, и методы по инициализации конкретной зависимости. Один метод может вызывать другой. К примеру HttpServer вызывает Repository, Repository вызывает Config. И в main.go достаточно вызывать верхнеуровневую зависимость, которая каскадом инициализирует все нужное, и инициализация будет начинаться с листьев графа. Так же шатдаун будет проходить в обратном порядке. Достаточно просто и удобно. Не нужно регистрировать каждую зависимость
А потом команда с горящей попой ночью чинит прод, потому что синьор написал для маленькой простой подзадачки не бинарный поиск а экспоненциальный алгоритм и все легло