适用于 C# 的 Loader
查看 源代码 .
设计思路
先决条件:
- dotnet 平台中已有成熟的插件框架: MAF/MEF
- csharp 是基于虚拟机和 CIL 的语言, 易于实现主动加载器
- csharp 有成熟的接口和反射机制
设计:
插件实现特定接口, 加载器通过 MEF 框架加载插件之后, 通过特定接口获取插件信息并进行调度
实际设计
文件组成
程序部分包含:
ArgsParser.cs
: 启动参数处理器Option.cs
: 启动选项定义类Program.cs
: 程序入口
加载器部分包含
CommunicationManager.cs
: 通讯管理器, 负责处理与 KitX Dashboard 的通讯PluginManager.cs
: 插件管理器, 调度 KitX Plugin 的生命周期
执行流程
- 处理命令行启动参数
- 得到 KitX Dashboard 插件服务器地址
- 随即实例化
CommunicationManager
并开始 TCP 通讯
- 随即实例化
- 得到插件跟启动文件路径
- 随即实例化
PluginManager.cs
- 传入发送信息的回调函数
- 加载插件 (通过 MEF 框架)
- 从插件实现了
IIdentityInterface
接口的类中整理PluginStruct
实例 - 向仪表盘发送 Json 序列化的
PluginStruct
, 格式: "PluginStruct:content
" - 获取插件实现了
IController
接口的类实例controller
- 调用
controller.SetRootPath
向插件传入插件文件所在路径 - 调用
controller.SetSendCommandAction
向插件传入发送Command
的回调函数 - 调用
controller.Start
开始插件生命周期
- 从插件实现了
- 随即实例化
- 得到 KitX Dashboard 插件服务器地址