(я знаю о других вопросах MEF / MAF, но это более конкретная проблема)
Я хочу создать приложение WPF, которое в основном будет простой надстройкойхост, графический интерфейс и настройки.Вся фактическая работа будет выполнена одним или несколькими плагинами.Им не нужно связываться друг с другом, главное приложение отправит им пользовательский ввод / команды и вернет некоторые результаты (например, элементы интерфейса пользователя WPF для рендеринга).
Теперь, так как ядроприложения будут основаны на плагинах, мне нужно выбрать хороший способ управления ими.Я хочу иметь возможность загружать / выгружать / перезагружать их во время выполнения (например, когда обновление найдено и загружено).Вероятно, они должны работать в собственной прикладной области и / или процессе для обеспечения стабильности и безопасности.
Из некоторых исследований и экспериментов я пришел к трем вариантам:
СистемаАддин (МАФ): Кажется, это может сделать все, что мне нужно.Существует конвейер, который позволяет одновременно запускать несколько версий API для совместимости и т. Д. Но, если я что-то упускаю, мне нужно несколько раз создавать API - представления хоста и плагина, контракт и два адаптера для контракта.Кроме того, имеется немного (по сравнению с MEF) информации и ресурсов вокруг, и большинству статей несколько лет.Я волнуюсь, что он медленно умирает и не хотел бы использовать его для нового проекта.
MEF: Этот кажется более простым, но также кажетсяэто много магии, которую я не могу контролировать, и слои не разделены так, как в MAF.Я хочу просто небольшую библиотеку, которую вы можете связать с новым проектом, реализовать интерфейс и плагин готов.
Ручная загрузка: Последний вариант будетвручную сканируйте папку на наличие .dlls , используйте отражение, чтобы найти классы плагинов и создать экземпляры.Хотя это выполнимо, я бы предпочел использовать некоторую инфраструктуру, а не загружать сборки вручную, создавать отдельный процесс / домен приложения и т. Д.
Итак, какой из них лучше всего подходит для такого типа приложений,есть что-то, что я пропустил?