Как создать и интегрировать плагин для приложения WPF

Я везде искал пример или что-то в этом роде, но безуспешно, поэтому я надеюсь, что кто-то здесь может направить меня в правильном направлении.

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

Я еще не создавал никаких плагинов, потому что думал, что можно использовать умный nuget package или pattern.

Итак, по сути, я хочу что-то не такое утомительное, как (я знаю, что это так упрощено...):

if (myFolderPath contains "plugin.dll")
{
    AddAMenuButtonWithThePlugin();
}

Я надеюсь на что-то вроде AnnotationMethod вроде:

[UseThisDll("plugin.dll")]
private void AddAMenuButtonWithThePlugin(){...}

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

По сути, у меня есть несколько компьютеров с WPF, которые используют Squirrel.Windows для установки и обновления.

Однако у меня есть несколько плагинов, которые, возможно, должны быть только на некоторых ПК.

Любой хороший совет? По сути, я хочу добавить button к page, что приведет к DLC page.

Попробуйте использовать Mono.Addins (nuget.org/packages/Mono.Addins), MEF(nuget.org/packages/System.ComponentModel.Composition) или (nuget.org/packages/System.Composition)

user3188639 18.07.2019 19:54

Спасибо @Tom, я посмотрю на них :)

Mike 18.07.2019 19:55

Вы могли бы в значительной степени описать возможности mef с вашим требованием.

Andy 18.07.2019 20:26

MEF идеально подходит для этого. Никогда не использовал его и не знакомился с ним раньше, и я вижу, что в сети есть много примеров. Идеально! Том или Энди, не могли бы вы создать ответ, чтобы я мог его принять? :)

Mike 19.07.2019 07:56

Я написал ответ, если вы все еще хотите его принять.

user3188639 28.09.2019 23:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
808
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого можно использовать MEF.

Существует несколько версий MEF:

  • Система.МодельКомпонента.Композиция. Это часть платформы .NET, а также доступная как Nuget-пакет.
  • System.Composition, облегченная версия. Он не допускает динамической рекомпозиции, но работает быстрее, чем первый. Пакет Nuget также доступный.
  • VS MEF, который является реализацией, используемой Visual Studio. Он может повторно использовать части из двух других библиотек. Репозиторий GitHub — здесь.

Другие вопросы по теме