版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

View File

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