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