Внедрение зависимостей и назначения ролей в шаблоне наблюдателя - это ортогональные проблемы. Объект может играть роль наблюдателя или наблюдаемого и одновременно быть либо составным объектом, либо составным объектом, либо тем, ни другим.
Рассмотрим типичный пример, когда кнопка состоит из элемента управления. Когда кнопка нажата, она вызывает событие Clicked, на которое отвечает содержащий элемент управления. В этом случае объект наблюдения составляет объект наблюдения.
Теперь рассмотрим экран, который состоит из нескольких элементов управления. Экран может вызывать событие закрытия, которое позволяет составленным элементам управления выполнять свою собственную работу по очистке до закрытия всего экрана. В этом случае наблюдаемый объект составляет наблюдателей.
Теперь рассмотрим экран, который состоит из кнопки и метки. При нажатии кнопки вызывается метод метки Clear (). В этом случае ни наблюдатель, ни наблюдаемый не составляют другого, но оба они состоят из объекта экрана.
Теперь рассмотрим экран, который вызывает событие Closing, на которое он сам подписывается (возможно, гарантируя, что он будет последним зарегистрированным обработчиком события). Когда он вызывает событие закрытия, позволяя любому наблюдателю сначала выполнить любые действия, которые ему могут понадобиться, он обрабатывает свое собственное событие. В этом случае наблюдатель является наблюдаемым.
Внедрение зависимостей касается того, как объект получает свои зависимости. Зависимость, введенная в данный объект, может содержать событие, на которое хочет подписаться объект, или зависимость может подписаться на объект, в который она вводится. То, как два объекта взаимодействуют после внедрения одного в другой, на самом деле не имеет ничего общего с внедрением зависимости.
EDIT
Относительно вашего разъяснительного раздела, я полагаю, я понимаю источник вашего замешательства. Традиционно объект создает свои собственные зависимости. Внедрение зависимостей инвертирует ответственность за получение этих зависимостей, перемещая знания о том, как зависимость получается вне объекта. Однако внедрение зависимости не инвертирует отношения зависимости. Возможно, вы путаете инъекцию зависимости с принципом обращения зависимости . Принцип инверсии зависимости полностью меняет отношение зависимостей между объектами «высокого уровня» и «низкого уровня», но внедрение зависимостей касается только того, как зависимости предоставляются данному объекту. Следовательно, использование внедрения зависимостей не меняет того, как объекты обычно взаимодействуют друг с другом. Если до использования объекта внедрения зависимости B, подписанного на события, вызванные объектом A (или наоборот), введение внедрения зависимости не изменит этого.