Я думаю, что все еще пытаюсь понять Dependency Injection и роль DI-контейнера.
Если DI означает, что компонент более низкого уровня зависит от компонента более высокого уровня, а циклическая ссылка отсутствует, не будет ли этот объект собирать мусор? Как я вижу, сборщик мусора (mark-and-sweep) хранит только те объекты, которые можно отследить с помощью цепочки ссылок, начиная с корня программы.
Поскольку у меня возникают трудности с объяснением, вот две UML-диаграммы, которые представляют противоречивые взгляды на внедрение зависимостей, как я это вижу:
Моя оригинальная интерпретация DI
Контейнер DI внедряет компоненты со своими обязательными ссылками, и каждый из них хранит ссылку на свою следующую команду с наивысшим значением в команде. Главный класс не может добраться до них, поэтому они должны быть собраны мусором.

Мое пересмотр DI
Контейнер DI внедряет компоненты с их обязательными ссылками, а также поддерживает ссылку на каждый из них. Каждый из них хранит ссылку на свою следующую команду. Класс Main может связаться с любым из них через DI-контейнер, поэтому они не должны собираться мусором.
