Как разработать динамическую основанную на плагине функциональность в C#

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

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

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

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

6
задан Matthew 1 June 2010 в 12:56
поделиться

2 ответа

MEF было бы хорошим местом для начала.

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

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

10
ответ дан 9 December 2019 в 22:30
поделиться

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

Если вы заботитесь об изоляции надстроек, вам следует почитать о AppDomains. У меня есть демонстрационный проект, который я сделал, чтобы помочь узнать, как работать с изолированными сборками внутри AppDomain здесь , который может вас заинтересовать.Краткие факты об изоляции: только ваши типы должны когда-либо пересекать границу, и эти типы должны быть запечатаны, запускаться кричать от обработки междоменных событий, а надстройки НИКОГДА не должны расширять MarshallByRefObject.

1
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: