版本260406
This commit is contained in:
@@ -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}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user