Есть веская причина иметь дочерние контейнеры, если внедрение зависимостей полностью охватывается проектом. Давайте представим приложение, которое обрабатывает сообщения от двух разных, но похожих систем. Большая часть обработки аналогична, но есть различия в поддержке совместимости от этих систем. Наша цель - повторно использовать код, который мы можем, при написании другого кода в зависимости от требований.
В ОО-программировании мы объединяем серию классов, которые будут сотрудничать для удовлетворения системных требований. Контейнер DI берет на себя эту ответственность. Когда сообщение поступает из системы, мы хотим создать набор взаимодействующих классов, подходящих для обработки сообщения из этой конкретной системы.
У нас есть контейнер верхнего уровня, в котором есть элементы, которые не различаются между двумя системами. Затем у нас есть дочерние контейнеры, которые do различаются в разных системах. Когда приходит сообщение, мы запрашиваем у дочернего DI-контейнера messageProcessor
. На основе конфигурации этого контейнера (при необходимости возвращаясь к родительскому контейнеру) платформа DI может возвращать messageProcessor (являющийся объектом, поддерживаемым соответствующими сотрудниками) для рассматриваемой системы.
Пожалуйста, оставьте комментарий, если это не четкий ответ. Кроме того, вы можете искать «проблема ног робота». Каждая нога идентична, но одной нужна левая нога, а другой нужна правая нога. Мы могли бы иметь дочерний контейнер DI для каждой ноги.