适用于 C# 的 Loader
约 398 字大约 1 分钟
2023-07-27
查看 源代码 .
设计思路
先决条件:
- 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 插件服务器地址 
 
变更历史
最后更新于: 查看全部变更历史
💾 Feat(Plume-Theme): Migrated
于 2025/1/25📝 Chore: Remove hard-coded permalink
于 2025/1/25📦 Struct: Move to
于 2025/1/25notesfolder to match theme's requirementsv23.07.02.3于 2023/7/2📄 Docs(Loaders): Updated csharp loader.
于 2023/7/2💾 📝 Feat, Chore(Rules): Add csharp loader doc.
于 2023/7/2