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

OSCHINA-MIRROR/LucasDot-NFinal.Common.Plugin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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

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

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

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 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.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