using Microsoft.Extensions.DependencyInjection; namespace SHH.CameraSdk { public static class ServiceExtensions { /// /// 注入 CameraSdk 的核心服务 /// 包含:内存缓存、配置管理、图像流水线、存储服务、相机管理、窗口管理等 /// /// DI 容器 /// 进程ID (用于确定存储路径) /// public static IServiceCollection AddCameraSdk(this IServiceCollection services, int processId) { // ============================================================= // 1. 基础组件注册 (修复你之前的报错) // ============================================================= services.AddMemoryCache(); // ★ 核心修复:添加内存缓存 // 注册配置管理器(指挥部) services.AddSingleton(); // ============================================================= // 2. 图像处理流水线编排 (Pipeline) - 修复版 // ============================================================= // 1. 先注册下游节点 (Enhance) // 这样整个系统(包括 Controller 和 Scale)都共享这唯一的一个实例 services.AddSingleton(sp => { var configMgr = sp.GetRequiredService(); return new ImageEnhanceCluster(4, configMgr); }); // 2. 再注册上游节点 (Scale) 并完成组装 services.AddSingleton(sp => { var configMgr = sp.GetRequiredService(); // 创建 Scale 实例 var scale = new ImageScaleCluster(4, configMgr); // ★ 关键修复:从容器中获取已经在上面注册好的 Enhance 实例 // 而不是 new 一个新的 var enhance = sp.GetRequiredService(); // ★ 编排流水线:缩放 -> 增亮 (现在引用的是同一个对象了) scale.SetNext(enhance); // ★ 全局路由挂载 GlobalPipelineRouter.SetProcessor(scale); return scale; }); // ============================================================= // 3. 核心业务服务 // ============================================================= // 核心设备管理器 (自动注入 IStorageService) services.AddSingleton(); // 动态窗口管理器 (自动注入 CameraManager) services.AddSingleton(); // 网络哨兵 (建议注册为单例,方便后续获取状态) services.AddSingleton(); // ============================================================= // 4. Web 过滤器 // ============================================================= services.AddScoped(); return services; } } }