2010-09-30 2 views
2

Думаю, я получу модель 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 переполнен и просто использование конфигурационных файлов для хранения команды - лучший подход?

ответ

1

Если у вас есть возможность просто использовать файлы конфигурации, это будет предпочтительнее. Это позволит добавлять или изменять плагины без перекомпиляции. Также это даст возможность заставить пользователей настраивать плагины.

+0

MEF позволит вам изменять плагины без компиляции ... – Tim

+0

@Tim: Я имел в виду не перекомпиляцию ядра, а перекомпиляцию в случае изменения модуля плагинов или компиляции в случае добавления плагина. –

+0

Да, вам придется перекомпилировать, если вы изменили какой-либо код. Вам не придется перекомпилировать, чтобы добавить плагин. Вот в чем смысл плагинов! – Tim

1

MEF - отличный способ добавить расширяемость в приложение. Вам просто нужно определить интерфейс в своем приложении, реализовать этот интерфейс во внешнем компоненте и добавить атрибут «Экспорт» в реализацию. Используя атрибут импорта в приложении, вы можете обнаружить внешний компонент. См. the documentation. Если вы прочтете это, у вас будет приложение, использующее MEF менее чем за 2 часа.

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

+0

Я запомню идею «за опыт обучения»! – Tim

0

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

Смежные вопросы