Основы IoC/DI с приложениями Smart Client Winform: как мне подойти к этому?
Я запускаю новое приложение Winforms, и я намерен использовать инфраструктуру IoC/DI (возможно, Ninject, но я также думаю о StructureMap и LinFu).
Кажется, что почти каждый, кто использует IoC/DI, делает это в веб-среде и практически ничего не использует при использовании Winforms.
Я хотел бы узнать, использует ли кто-либо IoC/DI Winforms и какие подходы вы использовали для решения проблем, связанных с Winforms (например, как сделать контейнер доступным в различных частях приложения, используете ли вы рамки для создания экземпляров ваших форм и т.д.)
Если кто-нибудь знает какие-либо проекты с открытым исходным кодом на основе Winforms, которые используют IoC/DI (неважно, в какой среде я должен иметь возможность переводить понятия), мне также нужны ссылки на них.
EDIT:
Люди больше не пишут Smart Clients?
EDIT:
Если бы вы могли указать мне на какой-то реальный код, который использует IoC/DI в приложении Winforms или даже в виде консольного типа (т.е. что-то, что не является веб-сайтом), я был бы признателен.
EDIT:
Я использую Ninject и обнаружил, что Ninject с радостью введет экземпляр этого общего интерфейса ядра, если вы укажете параметр конструктора IKernel. Это очень хорошо работает, но я все равно хотел бы услышать другие подходы, которые люди используют.
Ответы
Ответ 1
Недавно я начал писать новое приложение WinForms с нуля, используя StructureMap для IoC. Я ранее смотрел на SCSF и CAB, но обнаружил, что они слишком сложны.
Я написал несколько бесплатных API-интерфейсов поверх реестра StructureMaps, чтобы наши модули могли регистрировать команды, презентаторы и представления.
По моему опыту это стоило усилий во всех отношениях, я бы никогда не захотел написать приложение WinForms, не используя эти инструменты и высокоструктурированный модульный подход.
Ответ 2
Коллектив моделей и практик Microsoft, который поддерживает контейнер Unity, также создал "Интеллектуальный клиент - составной блок приложений пользовательского интерфейса" для winforms, который, я считаю, использует Unity. Я знаю, что новая версия WPF под названием Руководство для составных клиентских приложений (кодовое имя Prism) использует Unity
Ответ 3
Я написал приложение для отображения карт из векторных данных OpenStreetMap (http://wiki.openstreetmap.org/index.php/Kosmos). Я разработал свою собственную простую инфраструктуру MVP, которая использует Windsor Castle как контейнер IoC. Вы можете загрузить исходный код, если вам это интересно, в настоящее время он лицензирован BSD.
Сейчас я (медленно) работаю над редизайном этой структуры, чтобы динамически генерировать формы (вместо использования визуального дизайнера). Я играю с идеей введения своего рода свободного интерфейса для создания форм и элементов управления, но я еще не придумал для этого элегантного решения.
Ответ 4
Если вам просто нужен контейнер Inversion of Control и вы хотите получить чуть более низкий уровень, чем Unity, посмотрите ObjectBuilder из Группа шаблонов и практик Microsoft. Unity - это слой абстракции поверх ObjectBuilder.