Как разработать функциональность на основе динамического плагина в C # - PullRequest
6 голосов
/ 01 июня 2010

Я искал различные способы обеспечения поддержки плагинов для моего приложения. В идеале я буду создавать основную функциональность и на основе того, что разные клиенты будут разрабатывать различные плагины / надстройки, такие как импорт, экспорт данных и т. Д. Какие методы доступны для создания расширяемого приложения C # с помощью архитектуры плагинов?

Давайте составим пример. Если у нас есть программа, которая состоит из главного меню («Файл», «Редактировать», «Просмотреть» и т. Д.) И TreeView, которое отображает различные марки автомобилей, сгруппированных по производителям (Ford, GM, на данный момент). Щелчок правой кнопкой мыши по автомобилю отображает контекстное меню с единственным параметром «удалить автомобиль»

Как вы могли бы разработать приложение для развертывания плагинов, чтобы вы могли позволить одному клиенту увидеть новый бренд в TreeView, скажем, Honda, а также расширить контекстное меню автомобиля, чтобы они могли теперь? покрасить машину '?

В разработке Eclipse / RCP это легко обрабатывается точками расширения и плагинами. Как C # справляется с этим? Я пытался разработать собственную архитектуру плагинов и читать MEF.

Ответы [ 2 ]

10 голосов
/ 01 июня 2010

MEF было бы хорошим началом.

Статья Гленна Блока Управляемая расширяемая среда: создание составных приложений в .NET 4 с управляемой расширяемой средой дает хороший обзор.

Кстати, не обманывайтесь названием - вы также можете получить MEF для .NET 3.5 SP1.

1 голос
/ 01 июня 2010

Visual Studio 2010 использует MEF, поэтому я думаю, что это безопасная ставка, это предпочтительный путь для MS. System.Addin всегда казался немного тяжелым, но это может быть лучшим выбором, если вам нужны надстройки, чтобы они всегда работали, а ваша кодовая база постоянно развивалась.

Если вы хотите изолировать надстройки, вам следует ознакомиться с доменами приложений. У меня есть демонстрационный проект, который я сделал, чтобы помочь узнать, как работать с изоляцией сборок в домене приложения здесь , что может показаться вам интересным. Краткие сведения об изоляции: когда-либо только ваши типы должны пересекать границу, и эти типы должны быть запечатаны, запускаться кричащими из междоменной обработки событий, и надстройки никогда не должны расширять MarshallByRefObject.

...