Виндзорский Контейнер: Как указать, что общественная собственность не должна быть заполнена контейнером?

Обработка этого с помощью sessionattributes сделает код неуклюжим, так как вам придется писать все, если не все в yesnohandler.

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

Когда вы задаете пользователю вопрос «да», вы помещаете объект класса обработчика в стек. Теперь, когда пользователь ответил yesno, вы берете объект-обработчик, который доступен поверх стека, и вызываете его соответствующий метод.

12
задан David Gardiner 16 June 2010 в 02:23
поделиться

4 ответа

Я создал средство, чтобы помочь с этим:

3
ответ дан 2 December 2019 в 18:22
поделиться

Можно использовать Замок. Ядро. Атрибут DoNotWireAttribute, чтобы мешать свойству быть обеспеченным электричеством контейнером МОК (это находится в Замке. Базовый блок, что означает Вашу библиотеку только, должен взять зависимость от легкого Замка. Базовый блок - если, например, Вы хотите использовать код без инверсии контейнера управления в целом, или в другом контейнере МОК).

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

  1. Представьте некоторый атрибут на объявлении свойства в xml: <myprop соединяют проводом = "ложь"/>
  2. Наследуйтесь PropertiesDependenciesModelInspector, переопределив метод InspectProperties для применения некоторой дополнительной логики к идентификации, какие свойства должны быть добавлены как зависимости к модели компонентов (осмотр модели. Конфигурация для провода = "ложная" пара атрибут/значение).
  3. Наследуйтесь DefaultComponentModelBuilder и переопределите InitializeContributors, чтобы включать Вашу замену PropertiesDependenciesModelInspector - или просто удалить существующего участника свойств и добавить Ваше собственное во время выполнения с помощью методов AddContributor/RemoveContributor.
  4. Замените экземпляр услуг ComponentModelBuilder, присвоенный ядру Вашего контейнера.

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

kernel.GetHandler(typeof(MyComponent)).ComponentModel.Dependencies.RemoveAll(d => d.DependencyKey == "PropertyThatShouldNotBeWired");

YMMV с тем подходом, хотя - особенно, если у Вас есть startable сервисы или другие средства, которые могут нетерпеливо инстанцировать Вашего компонента после того, как он регистрируется.

11
ответ дан 2 December 2019 в 18:22
поделиться

Отправленный это на форуме групп Google слишком здесь: http://groups.google.com/group/castle-project-devel/browse_thread/thread/43aa513817bd057a

0
ответ дан 2 December 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: