Как правило, компоненты должны не знать о своих произвольных контейнерах, хотя контейнеры должны знать свои компоненты (если только это не ситуация сильной зависимости, например, элементы списка всегда находятся в типе списка, и вы можете установить сильные двусторонние отношения). Однако это звучит так, как будто вы достигаете общей обстановки. Вы можете найти много случаев, чтобы написать код для этого и случайно пропустить другие.
Зная, что пользовательский элемент управления знает о его окружении и более широком мире, вы можете вводить зависимости , которые делают ваш элемент управления менее пригодным для повторного использования и более сложным в обслуживании.
Если что-то, что нужно элементу управления, находится вне его, вы можете перейти к состав , заставив разработчика предоставить ссылку на нужную вещь в свойстве вашего пользовательского элемента управления. Это, например, способ, которым элементы управления проверкой в ASP.NET делают это, чтобы ссылаться на внешний элемент управления для проверки по идентификатору.
Конечно, то, что я указал, практично только в некоторых случаях. Есть ли конкретная причина или крайний случай, по которым вам нужно заставить свой пользовательский элемент управления оглядываться вокруг себя, или вы можете сойти с рук, предоставив разработчику инструкции о том, где этот элемент управления следует использовать?