using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using OrpaonVision.SiteApp.Runtime.Contracts; namespace OrpaonVision.SiteApp.Runtime.Services; /// /// 运行时服务工厂,根据配置选择真实或模拟实现。 /// public sealed class RuntimeServiceFactory { private readonly ILogger _logger; private readonly IServiceProvider _serviceProvider; private readonly HikCameraOptions _cameraOptions; private readonly YoloInferenceOptions _yoloOptions; /// /// 构造函数。 /// public RuntimeServiceFactory( ILogger logger, IServiceProvider serviceProvider, IOptions cameraOptions, IOptions yoloOptions) { _logger = logger; _serviceProvider = serviceProvider; _cameraOptions = cameraOptions.Value; _yoloOptions = yoloOptions.Value; } /// /// 创建海康相机服务。 /// public IHikCameraService CreateHikCameraService() { var runMode = _cameraOptions.RunMode?.ToUpperInvariant() ?? "MOCK"; _logger.LogInformation("创建海康相机服务,运行模式: {RunMode}", runMode); return runMode switch { "REAL" => ResolveRequired(), "MOCK" => ResolveRequired(), _ => CreateFallbackCameraService() }; } /// /// 创建YOLO推理服务。 /// public IYoloInferenceService CreateYoloInferenceService() { var runMode = _yoloOptions.RunMode?.ToUpperInvariant() ?? "MOCK"; _logger.LogInformation("创建YOLO推理服务,运行模式: {RunMode}", runMode); return runMode switch { "REAL" => ResolveRequired(), "MOCK" => ResolveRequired(), _ => CreateFallbackYoloService() }; } /// /// 创建回退海康相机服务。 /// private IHikCameraService CreateFallbackCameraService() { _logger.LogWarning("未知的相机运行模式,使用模拟实现"); return ResolveRequired(); } /// /// 创建回退YOLO推理服务。 /// private IYoloInferenceService CreateFallbackYoloService() { _logger.LogWarning("未知的YOLO运行模式,使用模拟实现"); return ResolveRequired(); } private T ResolveRequired() where T : class { var service = _serviceProvider.GetService(typeof(T)) as T; if (service != null) { return service; } throw new InvalidOperationException($"无法解析服务: {typeof(T).FullName}"); } }