Windsor.Castle: Создание компонентов по запросу + контекстная информация - PullRequest
1 голос
/ 22 июня 2009

(ПРИМЕЧАНИЕ. Я обновил этот вопрос от первоначального запроса о дочерних контейнерах до создания компонентов по запросу)

Вот моя проблема с дизайном: я использую контейнер Windsor для основного рабочего процесса приложения, но у меня есть определенные действия, которые мне нужно создать по требованию (например, когда пользователь нажимает на элемент меню). Я хочу, чтобы эти действия были автоматически связаны с контекстной информацией (например, действие DeletePointsAction должно было бы получить список точек, которые нужно удалить в конструкторе).

Первоначально я думал о том, чтобы иметь какой-то мини-IoC, который будет постоянно обновляться с такой контекстной информацией, а затем использоваться для подключения, и мне было интересно, могут ли дочерние контейнеры выполнять эту работу.

Но, прочитав немного больше о дочерних контейнерах и обдумав мою проблему, я нашел решение, которое кажется лучше (по крайней мере, на первый взгляд): сохранение Dictionary с этой контекстной информацией и использовать этот словарь при создании действий из контейнера Windsor. Единственный недостаток, который я вижу сейчас, заключается в том, что имена ключей в словаре всегда должны соответствовать именам параметров конструктора для действий.

Альтернатива - написать собственный пользовательский преобразователь зависимостей , который был бы достаточно умен, чтобы вычислять зависимости на основе типа значения словаря, а не обязательно его имени ключа. Я не уверен, сколько работы это будет означать, однако.

Есть какие-нибудь мысли / переживания по этому вопросу?

1 Ответ

1 голос
/ 23 июня 2009

ISubDependencyResolver, похоже, не слишком много работы. Я думаю, что слишком многое зависит от специфики вашего дизайна и ситуации, чтобы дать общий ответ. Мой совет: попробуйте разрешить с несколькими из самых сложных сценариев, с которыми вы столкнетесь, и посмотрите, как это работает для вас.

Хорошая новость заключается в том, что если вы скроете детали за контейнером, вы позже сможете переключиться на другое решение, если обнаружите, что оно не соответствует вашим потребностям.

...