Какие шаги для получения функциональности плагина или расширения в приложении C #? - PullRequest
1 голос
/ 28 января 2010

Я создавал архитектуры плагинов в Win32 и C / C ++ в течение многих лет, с точками расширения, динамически загружаемыми из DLL с LoadLibrary, GetProcAddress и т. Д.

Теперь пришло время для C #. Каковы соответствующие шаги там - динамически загрузить сборку? Или это совершенно другая схема?

Ответы [ 3 ]

3 голосов
/ 28 января 2010

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

Другим вариантом будет MEF , который также будет частью .NET 4, но предварительные версии также работают на текущей платформе .NET.

1 голос
/ 28 января 2010

В приложениях .Net мы можем использовать AppDomain и AppDomain.CurrentAppDomain для динамической загрузки сборок в наше приложение. Проблема заключается в том, что вы можете выгрузить сборку после ее загрузки в AppDomain. Для решения этой проблемы вам есть обходной путь. можно загружать такого рода сборки в другой домен приложений и выгружать его всякий раз, когда вам не нужны эти сборки. Но этот подход очень сложный, потому что передавать объекты между двумя сборками в двух разных доменах приложений не так просто.

1 голос
/ 28 января 2010

Вы можете использовать классы из пространства имен System.Addin. Смотрите это обсуждение: Выбор между MEF и MAF (System.AddIn)

Вот также демонстрационная версия: Приложения с поддержкой AddIn

Другим решением является использование Mono.AddIn , которое кажется довольно мощным.

...