Думаю, я получу модель MEF. Но мне нелегко видеть, подходит ли мне то, что я пытаюсь сделать.Следует ли использовать управляемую расширяемую структуру для использования внешних плагинов?
У меня есть приложение, которое вызовет сторонние плагины, чтобы выполнить некоторую обработку видео. Плагин может быть FFMPEG.exe или x264.exe, не имеет значения. Процесс вызова плагинов осуществляется через ProcessStartInfo (в основном через командную строку) и передается набор параметров. например
ffmpeg.exe -in "c:\vid.avi" -out "c:\vid.avi" -Xheight 100 -Xwidth 100
or
x264.exe -in "c:\vid.avi" -out "c:\vid.avi" -Yheight 100 -Ywidth 100
Свы, учитывая, что каждый плагин будет иметь свой собственный параметр устанавливает так уместно использовать MEF поэтому интерфейс будет таким же, независимо от того, какого плагин не используются (alebit через публичный договор)? Если да, должен ли я писать класс-оболочку для каждого плагина, реализующего контракт?
Правильно ли вы используете MEF? С одной стороны, я пытаюсь сделать мое приложение расширяемым, позволяя клиентам выбирать свои плагины. Но на самом деле я не уверен, что MEF переполнен и просто использование конфигурационных файлов для хранения команды - лучший подход?
MEF позволит вам изменять плагины без компиляции ... – Tim
@Tim: Я имел в виду не перекомпиляцию ядра, а перекомпиляцию в случае изменения модуля плагинов или компиляции в случае добавления плагина. –
Да, вам придется перекомпилировать, если вы изменили какой-либо код. Вам не придется перекомпилировать, чтобы добавить плагин. Вот в чем смысл плагинов! – Tim