fengling-gateway/.planning/phases/006-gateway-plugin-research/006-01-SUMMARY.md
movingsam 52eba07097 feat: add MigrationTool for gateway config migration (IMPL-7)
- Create MigrationTool console app for exporting DB config to K8s YAML
- Support dry-run mode and validation
- Add Npgsql and YamlDotNet dependencies
2026-03-08 00:35:04 +08:00

2.0 KiB
Raw Blame History

计划 006-01 总结:插件加载基础设施

执行状态: 已完成

完成的任务

Task 1: PluginLoadContext 隔离机制

  • 创建 src/yarpgateway/Plugins/PluginLoadContext.cs
  • 实现可卸载的 AssemblyLoadContext
  • 支持共享契约程序集(使用默认 ALC
  • 创建单元测试 PluginLoadContextTests.cs

Task 2: PluginLoader 发现和加载逻辑

  • 创建 src/yarpgateway/Plugins/PluginLoader.cs
  • 实现插件发现(从目录扫描 plugin.json
  • 实现影子复制(支持热重载)
  • 创建 DiscoveredPlugin.csPluginMetadata.cs
  • 创建单元测试 PluginLoaderTests.cs

Task 3: PluginHost 生命周期管理

  • 创建 src/yarpgateway/Plugins/PluginHost.cs
  • 实现 PluginHandle.cs 封装 ALC 和插件实例
  • 支持加载/卸载/重载插件
  • 提供 WeakReference 卸载验证
  • 创建单元测试 PluginHostTests.cs

实现的文件

文件 描述
src/yarpgateway/Plugins/PluginLoadContext.cs ALC 隔离机制
src/yarpgateway/Plugins/PluginLoader.cs 插件发现和加载
src/yarpgateway/Plugins/PluginHost.cs 生命周期管理
tests/YarpGateway.Tests/Unit/Plugins/PluginLoadContextTests.cs 隔离测试
tests/YarpGateway.Tests/Unit/Plugins/PluginLoaderTests.cs 加载测试
tests/YarpGateway.Tests/Unit/Plugins/PluginHostTests.cs 生命周期测试

测试结果

dotnet test --filter "FullyQualifiedName~Plugin"
已通过! - 失败: 0通过: 15总计: 15

验证

  • 构建通过:dotnet build src/yarpgateway/YarpGateway.csproj - 0 错误
  • 所有单元测试通过
  • 插件可在独立 AssemblyLoadContext 中加载
  • 插件可通过 WeakReference 验证卸载
  • 支持动态发现和加载插件

后续计划

阶段 6 还需完成:

  • PLUG-03插件隔离与生命周期管理已实现基础设施
  • YARP 集成:将插件集成到 YARP 管道