IoC: Существующие объекты среды выполнения, а не инициализированные контейнером предварительные условия для компонентов - PullRequest
0 голосов
/ 09 октября 2009

В моем случае я использую Castle Windsor в качестве контейнера IoC.

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

Я подозреваю, что есть два подхода:

  1. Создайте объект через контейнер в первый раз, затем настройте его с любыми необходимыми значениями времени выполнения, чтобы, когда впоследствии компонент запросил его у Windsor, он был готов к использованию.
  2. Создайте IFormProvider и конкретный FormProvider, где компоненту требуется ввести значение IFormProvider, которое он впоследствии запрашивает для экземпляра формы (т. Е. formProvider.Form).

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

1 Ответ

1 голос
/ 10 октября 2009

Это тривиально для Unity и его интерфейса Fluent; просто вызовите метод RegisterInstance контейнера. Это хорошее обсуждение этого вопроса на Настройка контейнера Unity (для v1.1, но 1.2 должно быть похоже).

Я не использовал Castle Windsor, но, очевидно, AddComponentInstance является эквивалентом. См. Можете ли вы зарегистрировать существующий экземпляр типа в Windsor Container .

...