Основы 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.