Я решил использовать принципы IoC в более крупном проекте. Тем не менее, я хотел бы получить что-то прямое, что беспокоило меня в течение длительного времени. Вывод, который я придумал, заключается в том, что контейнер IoC является архитектурным шаблоном, а не шаблоном проектирования. Другими словами, ни один класс не должен знать о его присутствии, и сам контейнер должен использоваться на уровне приложения, чтобы сшить все компоненты. По существу, он становится опцией, на вершине хорошо продуманной объектно-ориентированной модели. Сказав это, как можно получить доступ к разрешенным типам без разбрызгивания контейнеров IoC по всему месту (независимо от того, они абстрагированы или нет)? Единственный вариант, который я вижу здесь, - использовать абстрактные фабрики, которые используют контейнер IoC для разрешения конкретных типов. Это должно быть достаточно просто, чтобы поменяться местами для набора стандартных фабрик. Это хороший подход? Кто-нибудь здесь использовал его и насколько хорошо он работал на вас? Есть ли что-нибудь еще?Аннотация завод шаблон на вершине IoC?
Спасибо!
Я думаю, что я почти там. Оставайтесь со мной здесь :) Давайте просто скажем, что у меня интерфейс IFruit, который реализуется классом Apple. После регистрации этого конкретного типа я хочу использовать его в событии click button в форме Windows. Как мне попасть в класс Apple без явного доступа к контейнеру IoC из события кнопки? – 2010-01-03 18:29:26
Это зависит: много ли примеров IFruit в вашем приложении или только один? Если есть только один, он уже должен быть введен в класс с помощью обработчика щелчка. Если их много, вам, скорее всего, понадобится IFruitFactory, который может создать экземпляр IFruit из других значений времени выполнения. В последнем случае IFruitFactory представляет собой инъекционную зависимость. –
Учитывая, что существует только один экземпляр IFruit, единственный способ, которым я вижу его впрыскивание в класс Form с событием нажатия кнопки, - это изменить конструктор формы, чтобы включить интерфейс IFruit, а затем зарегистрировать сам Form с контейнером IoC для выполнения конструктора инъекции. Правильно ли это звучит? Спасибо за помощь! – 2010-01-03 19:27:16