1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/LucasDot-NFinal.Common.Plugin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.03.2025 16:34 7e31ab6

Базовое использование плагинов для быстрого расширения вашего проекта

  • Управление загрузкой, запуском и выгрузкой плагинов за одну минуту.
  • Общий каталог для совместного использования сборок между плагинами

Базовый метод использования

1. Создание проекта плагина с пользовательским входным классом

public class FastService
{
    public void Run(string name)
    {
        Console.WriteLine($"Привет! {name}");
    }
}

2. Установка NuGet пакета NFinal.Common.Plugin и вызов плагина

static void Main(string[] args)
{
    // Установка и использование
    PluginWrapper pluginWrapper =
        new PluginWrapper(new PluginInfo()
        {
            AssemblyName = "Имя сборки плагина",
            ClassName = "Полное имя класса плагина",
            Name = "Название плагина",
            PluginFolder = @"Каталог сборок плагина"
        });
    // Не возвращаем экземпляр, объект контролируется жизненным циклом pluginWrapper
    // Это гарантирует правильную выгрузку плагина
    pluginWrapper.New();
    pluginWrapper.Execute("Run", "Ли Лей");
    // Выгрузка
    pluginWrapper.Uninstall();
}

Обычный метод использования

1. Определение пользовательского интерфейса или базового класса для плагинов

public interface BaseService
{
    void Run();
}

2. Создание проекта плагина и реализация интерфейса или базового класса

public class SimpleService : BaseService
{
    public void Run(string name)
    {
        Console.WriteLine($"Здравствуйте, {name}!");
    }
}

3. Создание основного проекта для загрузки плагинов

static void Main(string[] args)
{
    // Установка и использование
    PluginWrapper<BaseService> pluginWrapper =
        new PluginWrapper<BaseService>(new PluginInfo()
        {
            AssemblyName = "Имя сборки плагина",
            ClassName = "Полное имя класса плагина",
            Name = "Название плагина",
            CommonAssemblyFolder = "Каталог общих сборок",
            PluginFolder = @"Каталог сборок плагина"
        });
    // Интерфейсный способ, можно вызвать возвращенный объект,
    // но этот экземпляр нельзя присваивать другим переменным или передавать как аргументы других функций,
    // чтобы избежать ошибок при выгрузке плагина
    var simpleService = pluginWrapper.New();
    simpleService.Run("Хан Мэй Мэй");
    // Выгрузка
    pluginWrapper.Uninstall();
}

Внимание

  1. В основной программе удалите все сборки, используемые в каталоге плагинов, иначе возникнут ошибки поиска сборок.
  2. Проекты плагинов и основной программы должны быть одного типа .NET Core и иметь одинаковую версию.
  3. System.Drawing.Common объявлено совместимым со стандартом .NET Standard, однако работает только на Windows. Если плагины содержат эту сборку, то они должны быть выпущены для платформы Win64 или Win32.
  4. Есть много неправильно оформленных сторонних NuGet пакетов, которые заявляют совместимость со всеми платформами, но фактически работают только на одной платформе, что может привести к ошибкам при выполнении на Linux или других платформах, таких как "Не поддерживается эта платформа". Это не является проблемой плагинов.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/LucasDot-NFinal.Common.Plugin.git
git@api.gitlife.ru:oschina-mirror/LucasDot-NFinal.Common.Plugin.git
oschina-mirror
LucasDot-NFinal.Common.Plugin
LucasDot-NFinal.Common.Plugin
master