阶段性批量提交

This commit is contained in:
2026-01-05 14:54:06 +08:00
parent 917d76a87f
commit a697aab3e0
21 changed files with 1479 additions and 379 deletions

View File

@@ -0,0 +1,82 @@
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)
// =============================================================
// 这里我们利用 Factory 模式在注册时完成链条组装,保持了你原有的逻辑
services.AddSingleton<ImageScaleCluster>(sp =>
{
var configMgr = sp.GetRequiredService<ProcessingConfigManager>();
// 手动创建实例
var scale = new ImageScaleCluster(4, configMgr);
var enhance = new ImageEnhanceCluster(4, configMgr);
// ★ 编排流水线:缩放 -> 增亮
scale.SetNext(enhance);
// ★ 全局路由挂载 (兼容旧驱动层)
GlobalPipelineRouter.SetProcessor(scale);
return scale;
});
// 注册 EnhanceCluster以防 Controller 单独请求它
// 注意:这里我们通过从 Scale 中获取 Next 来保证是同一个实例链条
services.AddSingleton<ImageEnhanceCluster>(sp =>
{
var scale = sp.GetRequiredService<ImageScaleCluster>();
// 这里假设链条没变,或者你可以重新 new 一个,但为了保持引用一致性,
// 建议尽量通过主入口访问,或者在这里重新创建独立的(取决于业务需求)。
// 按照你之前的逻辑,这里为了简单,我们重新注册一个新的或沿用上一个逻辑。
// *最佳实践*:如果 enhancing 是依附于 scaling 的,通常只注册 Head。
// 但为了兼容你原代码的 DI 注册:
return new ImageEnhanceCluster(4, sp.GetRequiredService<ProcessingConfigManager>());
});
// =============================================================
// 3. 核心业务服务
// =============================================================
// 文件存储服务 (依赖 processId)
services.AddSingleton<IStorageService>(sp => new FileStorageService(processId));
// 核心设备管理器 (自动注入 IStorageService)
services.AddSingleton<CameraManager>();
// 动态窗口管理器 (自动注入 CameraManager)
services.AddSingleton<DisplayWindowManager>();
// 网络哨兵 (建议注册为单例,方便后续获取状态)
services.AddSingleton<ConnectivitySentinel>();
// =============================================================
// 4. Web 过滤器
// =============================================================
services.AddScoped<UserActionFilter>();
return services;
}
}
}