Так что давайте сначала создадим макет дизайна. У меня есть поле со списком с кнопкой, и у меня есть папка с плагинами.

Допустим, у меня есть плагин imageeffect.cs в папке плагинов. этот класс ДОЛЖЕН иметь такие свойства, как "title". Моя программа получает этот «заголовок» и динамически загружает поле со списком с этим заголовком. Итак, теперь моя программа распознает плагин. Теперь, когда пользователь нажимает кнопку, я хочу, чтобы некоторые данные (обработанные моей программой) передавались в плагин imageeffect.cs, где он выполняет все свои действия и возвращает мне статус.

Так резюмируем. моя программа читает каталог плагинов. загружает свойство "title" каждого плагина (определенное мной, кто бы ни создавал плагин) в поле со списком. Когда пользователь нажимает кнопку, «данные» или в данном случае изображение отправляются в плагин, и плагин действительно работает с ним. Затем он возвращает мне «Статус» или, в данном случае, картинку с любыми эффектами, которые он хотел.

5
masfenix 15 Янв 2010 в 21:25
1
Комментарий: «классической проблемой» архитектуры подключаемых модулей для C # была сложность их контроля: стандартные «простые» решения загружают каждый подключаемый модуль в домен приложения: это означает, что вы не можете выгрузить ни один из них без завершения работы. приложение. А загрузка каждого подключаемого модуля в отдельный домен приложения и выборочная выгрузка без некоторых «хаков» оказались очень сложными. Вот почему я рекомендую вам следовать приведенному ниже ответу «dtb», чтобы взглянуть на MEF, который специально разработан для обработки таких сценариев (а также имеет множество других функций).
 – 
BillW
15 Янв 2010 в 22:23

3 ответа

Лучший ответ

MEF с DirectoryCatalog.

9
dtb 15 Янв 2010 в 21:28
MEF предназначен для .NET 4.0 или совместим с 2.0 / 3.0 / 3.5?
 – 
STW
15 Янв 2010 в 21:33
2
MEF будет включен в .NET 4.0 Framework, но вы также можете загрузить его с веб-сайта MEF для использования с предыдущими версиями.
 – 
dtb
15 Янв 2010 в 21:37

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

http://crazorsharp.blogspot.com/2009/03/net-reflection-part-2-loading.html

4
BFree 15 Янв 2010 в 21:42

Ok. Во-первых, я бы посоветовал, чтобы ваши плагины были скомпилированы .dll, а не просто .cs файлами. Однако, если вы хотите использовать только файлы .cs, сначала посмотрите здесь:

http://www.codeproject.com/KB/cs/livecodedotnet.aspx

А затем, чтобы реализовать систему плагинов, посмотрите эту статью:

http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

Надеюсь, это поможет :)

0
FallenAvatar 15 Янв 2010 в 21:28