просто каша. Я понимаю что это явно решает какую то важную проблему. Но получается, что я как мартышка на угад делаю.
Начать надо с понимания Dependency Inversion. Фишка в том, что раньше мы как писали — импортировали в высокоуровневые политики код низкоуровневых. Т.е. например в UserService импортировали какой-нибудь логгер. Это очень усложняет поддержку кода. Дальше придумали просто инжектировать все зависимости в конструктор, чтобы развернуть эту зависимость. Т.е. UserService уже не импортит логгер и не создаёт его экземпляр, ав порождает самостоятельно. Следующий шаг — появление IoC-контейнера, который уже сам развязывает твои зависимости. В итоге ты просто пишешь все зависимости в конструкторе, объявляешь, что у тебя injactable сущность и IoC-контейнер ищет в еёё в зарегестрированных провайдерах и инжектит в рантайме.