2010-07-15 3 views
16

Я начинаю новый проект, который будет очень полезен для программных надстроек. Программа в своей базовой форме считывает данные из последовательного порта и анализирует его в записи базы данных. Примерами надстроек, которые можно было бы написать, было бы надстройка авто-архива, надстройка для записи фильтров и т. Д. Я пишу как программу, так и надстройки, но некоторым заказчикам нужны индивидуальные решения, поэтому вместо того, чтобы разворачиваться и делать совершенно отдельную программу, дополнения были бы замечательными. Простейшим дополнением, вероятно, будет форма, в которой конструктор принимает ссылку на объект, каким-то образом манипулирует объектом, а затем закрывается.Создание приложения с поддержкой подключаемого модуля

К сожалению, я понятия не имею, с чего начать кодирование, и почти так же мало, где искать. Все, что я ищу, вызывает браузерные надстройки. Из чего у меня собраны, мне нужно посмотреть в динамическую загрузку DLL. Кроме того, я не знаю. Есть ли у кого-нибудь хорошие ресурсы или примеры, о которых они знают?

Я рад предоставить более подробную информацию, но этот проект в его начале, так что я не имею тонны конкретных деталей (специфика вида поражения точки надстроек, тоже.)

ответ

8

Вы должны серьезно рассмотреть возможность использования Managed Extensibility Framework (MEF) для обработки вашей архитектуры плагина. Это требует думать о вещах немного по-другому, но это хорошо стоит.

+2

+1. Я пришел сюда, чтобы сутулиться, и нашел, что он уже пригнулся. Хороший сутенер, сэр! – Randolpho

+0

MEF полностью пухлый – dthorpe

+0

MEF отлично! Это именно то, что я искал. Мне придется немного поработать с ним, но у меня уже есть простая форма, которая позволяет вам добавлять к ней кнопки. Потрясающие! – dlras2

0

Думаю, что Reflection сыграет главную роль.

Я воспользовался приложением, имевшим папку с плагином. Наблюдатель файловой системы будет следить за папкой, и когда в нее будет помещена новая DLL, она будет использовать отражение, чтобы определить, какие типы подключаемых модулей включены, загрузили и добавили их в список доступных классов и т. Д.

6

Th является простым примером, иллюстрирующим основную технику.

codeproject.com - Plugin Architecture using C#

Эта статья показывает вам, как включить ... как плагин для другого приложения или использовать это как отдельное приложение.

в .NET 4 у вас есть Managed Extensibility Framework (MEF), чтобы выполнить большую часть сантехники.

В .NET 3.5 у вас был System.AddIn, но многие считали его слишком сложным.

codeproject.com - AddIn Enabled Applications with System.AddIn

AddIns (иногда называемые плагины) являются отдельно скомпилированные компоненты, что приложение может определить местонахождение, загружать и сделать использование во время выполнения (динамически). приложение, которое было разработано для использования надстроек может быть повышенно (по развивающимся более надстройкам) без необходимости первоначально приложений быть изменены или перекомпиляцией и испытано

+0

+1 для добавления MEF – Randolpho

0

Попробуйте использовать термин «Добавить- in 'или' plug-in 'для ваших исследований вместо «add-on». Это должно помочь некоторым.

Если вы используете .Net 4, в структуре есть пространство имён надстройки, которое поможет вам в этом.

Написание плагинов для приложения - не простая задача. Вам нужно будет поддерживать довольно строгие различия между вашими интерфейсами, вам нужно предоставить библиотеку interop, которая определяет ВСЕХ поддерживаемых типов подключаемых модулей, и вы захотите провести некоторое исследование зависимости инжекция & инверсия управления, в дополнение к ранее предложенным исследованиям отражения.

Похоже, что у вас может быть занятый уик-энд, проводящий исследования.

4

Вам действительно нужно посмотреть на Managed Extensibility Framework (MEF). Это специально предназначено для поддержки надстроек и другой расширяемости.

+0

Я не знаю, если вы или @dthorpe опубликовали сначала, но все равно +1! – Randolpho

+0

Jinx! Мы отправили почти одновременно. (в течение 10 секунд друг от друга) – dthorpe

+0

@dthorpe - Теперь я должен вам кока-колу! (это был наш региональный вариант «Jinx») – Robaticus