This repository has been archived by the owner on Sep 1, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 23
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...
}