Files
LanMountainDesktop/docs/01-插件开发/README.md
2026-06-08 03:54:33 +08:00

8.9 KiB
Raw Blame History

插件开发完整指南

欢迎来到阑山桌面插件开发指南!本章节将带你从零开始,掌握插件开发的完整流程。

📚 学习路径

初学者路径

如果你是第一次开发阑山桌面插件,请按以下顺序学习:

  1. 环境准备 - 配置开发环境和工具
  2. 创建第一个插件 - 快速上手
  3. 插件生命周期 - 理解插件运行机制
  4. 组件系统 - 创建桌面组件

进阶路径

已经了解基础,想要深入学习?

  1. 设置系统 - 管理插件配置
  2. 主题与外观 - 适配暗色/亮色模式
  3. 插件通信 - 插件间数据交互
  4. IPC 公共服务 - 对外提供服务

实战路径

通过完整案例学习:

  1. 天气组件插件 - 完整的组件开发
  2. 待办事项插件 - 数据持久化
  3. RSS 阅读器 - 网络请求和列表展示
  4. 系统监控插件 - 系统信息获取

🎯 核心概念

什么是插件?

插件是扩展阑山桌面功能的独立模块,可以:

  • 添加新的桌面组件Widget
  • 注册设置页面
  • 提供后台服务
  • 与其他插件通信
  • 对外提供 IPC 服务

插件架构

┌─────────────────────────────────────┐
│      LanMountainDesktop Host        │
│  (桌面宿主 - 主程序)                  │
├─────────────────────────────────────┤
│     Plugin Runtime (插件运行时)      │
│  ┌────────────┐  ┌────────────┐    │
│  │  Plugin A  │  │  Plugin B  │    │
│  ├────────────┤  ├────────────┤    │
│  │ Components │  │ Components │    │
│  │  Settings  │  │  Settings  │    │
│  │  Services  │  │  Services  │    │
│  └────────────┘  └────────────┘    │
└─────────────────────────────────────┘

插件 SDK 版本

SDK 版本 发布时间 主要特性
5.0.0 2025.05 当前版本 - 进程隔离准备、IPC 公共服务
4.0.0 2025.03 组件系统重构、设置域管理
3.0.0 2025.01 Avalonia 12 升级
2.0.0 2024.11 稳定 API插件市场支持
1.0.0 2024.09 初始版本

📖 文档结构

01-快速开始

快速上手,从零到一创建插件

02-核心概念

深入理解插件系统的工作原理

03-API参考

完整的 API 文档和使用示例

04-实战案例

通过完整示例学习插件开发

05-发布维护

插件的发布、更新和维护

🚀 快速参考

创建插件

# 安装模板
dotnet new install LanMountainDesktop.PluginTemplate

# 创建项目
dotnet new lmd-plugin -n MyPlugin

# 构建
dotnet build

插件入口

public class Plugin : IPlugin
{
    public string Id => "com.example.myplugin";
    public string Name => "My Plugin";
    public string Version => "1.0.0";
    
    public async Task InitializeAsync(IPluginContext context)
    {
        // 注册组件
        var registry = context.Services.GetService<IComponentRegistry>();
        registry?.RegisterComponent<MyComponent>();
    }
    
    public Task ShutdownAsync() => Task.CompletedTask;
}

创建组件

[Component(
    Id = "com.example.myplugin.mycomponent",
    Name = "我的组件",
    Category = "工具"
)]
public class MyComponent : ComponentBase
{
    public override string Id => "com.example.myplugin.mycomponent";
    public override string Name => "我的组件";
}

💡 最佳实践

代码规范

  • 使用异步编程(async/await
  • 启用可空引用类型(nullable enable
  • 编写 XML 文档注释
  • 遵循 C# 命名约定
  • 使用依赖注入模式

性能优化

  • 避免阻塞 UI 线程
  • 使用延迟加载
  • 缓存数据避免重复计算
  • 及时释放资源(实现 IDisposable
  • 使用弱事件模式避免内存泄漏

用户体验

  • 适配亮色/暗色主题
  • 支持多语言本地化
  • 提供友好的错误提示
  • 响应式设计适配不同分辨率
  • 提供设置页让用户自定义

🔗 相关资源

官方资源

技术文档

社区

常见问题

我需要什么基础?

  • 必需: C# 基础语法、面向对象编程
  • 推荐: XAML/Avalonia UI 基础、MVVM 模式
  • 加分: 异步编程、依赖注入

插件可以做什么?

插件可以:

  • 添加桌面组件(显示天气、时钟、待办等)
  • 添加设置页面
  • 提供后台服务(定时任务、数据同步等)
  • 与其他插件通信
  • 通过 IPC 对外提供服务

插件不能:

  • 修改宿主核心代码
  • 直接访问其他插件的私有数据
  • 绕过权限系统访问敏感资源

如何调试插件?

  1. 将插件构建到宿主的插件目录
  2. 启动宿主应用
  3. 使用 IDE 附加到宿主进程
  4. 在插件代码中设置断点

详见 调试与测试

插件会被隔离运行吗?

当前插件运行在宿主进程内in-process 模式),未来将支持进程隔离模式:

  • 当前: 进程内插件,共享内存空间
  • 未来: 进程隔离插件,独立进程运行(计划中)

🎯 下一步

准备开始了吗?