#c_sharp #wpf #dll
Пишу десктопное приложение на C#, которая по задумке должна подключать dll, уже будучи скомпилированой и работающей. Как это возможно реализовать? И возможно ли вообще :)
Ответы
Ответ 1
Варианты предлагаю такие: Использовать MEF (как в ответе выше) Использовать MAF (как альтернатива, она может выгружать DLL налету) Использовать Prism Создать общую библиотеку с хорошо продуманным интерфейсом и классом (н-р InitPlugin); обязать ваши библиотеки иметь эту библиотеку и обращаться к нужным интерфейсам посредством Reflection. Для неуправляемого кода можно использовать очень интересную возможность: дело в том, что когда функция C# с атрибутом ImportDll обращается к библиотеке, она ищет ее в определенных местах (в системной папке и нек других), но если не найдет, то обязательно также посмотрит в CurrentDirectory. Устанавливая Environment.CurrentDirectory на нужные каталоги, можно добиться системы плагинов на неуправляемом уровне. Последний который приходит в голову, это компилить какие-нибудь алгоритмы прямо на лету через CSharp Compiler.Ответ 2
Рассматривайте ваши бибилиотеки как "плагины" или расширения основной программы. Начиная с 4 версии фреймворка в платформу .NET включен Managed Extensibility Framework Платформа Managed Extensibility Framework, или MEF, – это библиотека для создания простых расширяемых приложений. Она позволяет разработчикам приложений находить и использовать расширения без каких-либо настроек. Кроме того, дает разработчикам расширений возможность легко инкапсулировать код и избежать использования ненадежных жестких зависимостей. MEF не только позволяет использовать зависимости повторно, но и дает возможности применять их в различных приложениях.
Комментариев нет:
Отправить комментарий