Skip to content
This repository has been archived by the owner on Sep 1, 2021. It is now read-only.

DevPlugin

Deliay edited this page Sep 30, 2017 · 4 revisions

插件是主程序调度的单元,插件是直接被程序初始化的类,插件通过放置在程序的 Plugins\ 文件夹下被程序所示别并加载进当前程序实例的Assemblies中。

插件通过继承Plugin类实现,程序会根据类签名对在Plugins文件夹中的所有dll文件进行加载,但是只会对继承了Plugin类的类进行初始化。

Plugin类成员及其成员函数

类别 成员名称 类型 说明
public readonly Name String 插件名称
public readonly Author String 插件作者
public EventBus BaseEventDispatcher<IPluginEvent> 插件的事件绑定、触发器
标识 函数签名 返回类型 说明
public Plugin(string Name, string Author) .ctor() 构造函数
protected getHoster() SyncHost 获得当前程序实例的SyncHost类
public getName() string 获得插件名称(旧代码兼容)
public getAuthor() string 获得插件作者(旧代码兼容)
public virtual OnDisable() void 当插件需要执行禁用操作时,被调用的函数
public virtual OnEnable() void 当插件被程序识别并进行初始化时所调用的函数

当插件出现依赖问题时,就需要使用插件的Attribute进行解决以来,典型问题是插件A 依赖插件B,但是程序的调度是根据文件名的先后顺序来决定加载次序的。如果插件A先于插件B加载,则插件A会丢失或无法访问插件B的实例或者是相关资源。此时需要在插件A的实现上添加一个Attribute,让程序在插件B加载之后再进行插件A的加载操作。

依赖被分为两种情况,硬依赖和软依赖。

硬依赖用于 在加载插件之前,必须将依赖的插件初始化,否则报错 的情况,也就是必须安装了目标插件,才能继续加载。

软依赖用于 声明式的让程序先加载目标插件,如果目标插件不存在,则继续加载。 在安装了目标插件的情况下,程序会先调用目标插件进行加载操作,如果没有安装目标插件,程序则会按正常顺序加载插件。

    [SyncRequirePlugin(typeof(DefaultPlugin.DefaultPlugin))]
    //DefaultPlugin这个插件进行硬依赖,必须有这个插件!
    public class DefaultGUI : Plugin 
    {
        //Implements....
    }

    [SyncSoftRequirePlugin("DefaultPlugin")]
    //对DefaultPlugin这个插件进行软依赖,没有DefaultPlugin这个插件也行!
    public class PPQuery : Plugin
    {
        //Implements...
    }
Clone this wiki locally