Files
Ayay/SHH.CameraSdk/Core/ServiceExtensions.cs
2026-01-05 14:54:06 +08:00

82 lines
3.8 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)
// =============================================================
// 这里我们利用 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;
}
}
}