Files
OrpaonVision/OrpaonVision.SiteApp/Runtime/Services/RuntimeServiceFactory.cs
2026-04-12 22:34:46 +08:00

95 lines
2.9 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.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<MockHikCameraService>(),
"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}");
}
}