Расширяемое приложение WPF - MEF, MAF или простая загрузка?

(Я знаю о других вопросах MEF/MAF, но это - более определенная проблема),

Я хочу создать приложение WPF, которое в основном будет просто простым дополнительным хостом, GUI и настройками. Вся фактическая работа будет сделана одним или несколькими плагин (плагины). Они не должны связываться друг между другом, главное приложение отправит ввод данных пользователем / команды им, и они возвратят некоторые результаты (например, WPF элементы UI для рендеринга).

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

От некоторого исследования и экспериментов я дошел до трех опций:

  • Система. Дополнение (MAF): кажется, что это может сделать все, в чем я нуждаюсь. Существует конвейер, который позволяет нескольким версиям API быть выполненными одновременно для совместимости и т.д. Но если я не пропускаю что-то, что я должен несколько раз создавать API - хост и сменные представления, контракт и два адаптера для контракта. Также существует мало (по сравнению с MEF), информации и ресурсам вокруг и большинству статей немного лет. Я волнуюсь, что это медленно умирает и не использовало бы его для нового проекта.

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

  • Ручная загрузка: последняя опция состояла бы в том, чтобы вручную просканировать папку для .dlls, использовать отражение, чтобы найти сменные классы и создать экземпляры. В то время как это выполнимо, я использовал бы некоторую платформу, чем вручную загрузил бы блоки, создал бы отдельный process/appdomain и т.д.

Так, какой был бы лучшим для этого вида приложения или является там чем-то, что я пропустил?

11
задан lacop 24 June 2010 в 16:04
поделиться

1 ответ

MEF - определенно самый простой вариант из трех. Он действительно был разработан с учетом именно этого сценария (расширяемые приложения).

Это фактически «подключаемый» механизм, используемый Visual Studio, который является приложением WPF. Все, что вам нужно сделать, это сделать так, чтобы ваш «плагин» реализовал интерфейс или был унаследован от известного базового класса и добавил атрибут [Export] . Если сборка добавлена ​​в каталог вашего основного приложения, этот тип может быть [Импорт] изменен основным приложением за один шаг. Для выполнения этой работы требуется очень мало работы.

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

10
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

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