Files
Ayay/SHH.CameraSdk/Core/ServiceExtensions.cs
2026-01-16 14:30:42 +08:00

78 lines
3.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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>();
// =============================================================
// 2. 图像处理流水线编排 (Pipeline) - 修复版
// =============================================================
// 1. 先注册下游节点 (Enhance)
// 这样整个系统(包括 Controller 和 Scale都共享这唯一的一个实例
services.AddSingleton<ImageEnhanceCluster>(sp =>
{
var configMgr = sp.GetRequiredService<ProcessingConfigManager>();
return new ImageEnhanceCluster(4, configMgr);
});
// 2. 再注册上游节点 (Scale) 并完成组装
services.AddSingleton<ImageScaleCluster>(sp =>
{
var configMgr = sp.GetRequiredService<ProcessingConfigManager>();
// 创建 Scale 实例
var scale = new ImageScaleCluster(4, configMgr);
// ★ 关键修复:从容器中获取已经在上面注册好的 Enhance 实例
// 而不是 new 一个新的
var enhance = sp.GetRequiredService<ImageEnhanceCluster>();
// ★ 编排流水线:缩放 -> 增亮 (现在引用的是同一个对象了)
scale.SetNext(enhance);
// ★ 全局路由挂载
GlobalPipelineRouter.SetProcessor(scale);
return scale;
});
// =============================================================
// 3. 核心业务服务
// =============================================================
// 核心设备管理器 (自动注入 IStorageService)
services.AddSingleton<CameraManager>();
// 动态窗口管理器 (自动注入 CameraManager)
services.AddSingleton<DisplayWindowManager>();
// 网络哨兵 (建议注册为单例,方便后续获取状态)
services.AddSingleton<ConnectivitySentinel>();
// =============================================================
// 4. Web 过滤器
// =============================================================
services.AddScoped<UserActionFilter>();
return services;
}
}
}