将Feature/XP.Common和Feature/XP.Hardware分支合并至Develop/XP.forHardwareAndCommon,完善XPapp注册和相关硬件类库通用类库功能。
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Prism.Events;
|
||||
using Prism.Ioc;
|
||||
using XP.Hardware.Detector.Abstractions;
|
||||
using XP.Hardware.Detector.Abstractions.Enums;
|
||||
using XP.Hardware.Detector.Config;
|
||||
using XP.Hardware.Detector.Implementations;
|
||||
using XP.Common.Logging.Interfaces;
|
||||
|
||||
namespace XP.Hardware.Detector.Factories
|
||||
{
|
||||
/// <summary>
|
||||
/// 探测器工厂实现 | Detector factory implementation
|
||||
/// 配置驱动的探测器实例创建
|
||||
/// </summary>
|
||||
public class DetectorFactory : IDetectorFactory
|
||||
{
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly IContainerProvider _containerProvider;
|
||||
private readonly ILoggerService _logger;
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数 | Constructor
|
||||
/// </summary>
|
||||
/// <param name="eventAggregator">事件聚合器 | Event aggregator</param>
|
||||
/// <param name="containerProvider">Prism 容器 | Prism container</param>
|
||||
/// <param name="logger">日志服务 | Logger service</param>
|
||||
public DetectorFactory(IEventAggregator eventAggregator, IContainerProvider containerProvider, ILoggerService logger = null)
|
||||
{
|
||||
_eventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
|
||||
_containerProvider = containerProvider ?? throw new ArgumentNullException(nameof(containerProvider));
|
||||
_logger = logger?.ForModule("DetectorFactory");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建探测器实例 | Create detector instance
|
||||
/// </summary>
|
||||
public DetectorResult<IAreaDetector> CreateDetector(DetectorConfig config)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
var errorMsg = "配置不能为空 | Configuration cannot be null";
|
||||
_logger?.Error(null, errorMsg);
|
||||
return DetectorResult<IAreaDetector>.Failure(errorMsg);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
_logger?.Info($"开始创建探测器,类型:{config.Type} | Starting to create detector, type: {config.Type}");
|
||||
|
||||
IAreaDetector detector = config.Type switch
|
||||
{
|
||||
DetectorType.Varex => CreateVarexDetector(config),
|
||||
//DetectorType.IRay => CreateIRayDetector(config),
|
||||
DetectorType.Hamamatsu => throw new NotImplementedException("Hamamatsu 探测器尚未实现 | Hamamatsu detector not implemented yet"),
|
||||
_ => throw new NotSupportedException($"不支持的探测器类型:{config.Type} | Unsupported detector type: {config.Type}")
|
||||
};
|
||||
|
||||
// 注册到容器(通过 IContainerExtension 注册实例)| Register to container
|
||||
var containerExtension = _containerProvider.Resolve<IContainerExtension>();
|
||||
containerExtension.RegisterInstance<IAreaDetector>(detector);
|
||||
_logger?.Debug("探测器实例已注册到容器 | Detector instance registered to container");
|
||||
|
||||
_logger?.Info($"探测器创建成功,类型:{config.Type} | Detector created successfully, type: {config.Type}");
|
||||
return DetectorResult<IAreaDetector>.Success(detector, "探测器创建成功 | Detector created successfully");
|
||||
}
|
||||
catch (NotImplementedException ex)
|
||||
{
|
||||
var errorMsg = $"探测器类型尚未实现 | Detector type not implemented: {ex.Message}";
|
||||
_logger?.Warn(errorMsg);
|
||||
return DetectorResult<IAreaDetector>.Failure(errorMsg, ex, -2);
|
||||
}
|
||||
catch (NotSupportedException ex)
|
||||
{
|
||||
var errorMsg = $"不支持的探测器类型 | Unsupported detector type: {ex.Message}";
|
||||
_logger?.Error(ex, errorMsg);
|
||||
return DetectorResult<IAreaDetector>.Failure(errorMsg, ex, -3);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var errorMsg = $"创建探测器失败 | Failed to create detector: {ex.Message}";
|
||||
_logger?.Error(ex, errorMsg);
|
||||
return DetectorResult<IAreaDetector>.Failure(errorMsg, ex, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建 Varex 探测器 | Create Varex detector
|
||||
/// </summary>
|
||||
private IAreaDetector CreateVarexDetector(DetectorConfig config)
|
||||
{
|
||||
var varexConfig = config as VarexDetectorConfig
|
||||
?? throw new ArgumentException("Varex 探测器需要 VarexDetectorConfig | Varex detector requires VarexDetectorConfig");
|
||||
|
||||
_logger?.Debug($"创建 Varex 探测器实例,Binning 模式:{varexConfig.BinningMode},增益模式:{varexConfig.GainMode} | Creating Varex detector instance, Binning mode: {varexConfig.BinningMode}, Gain mode: {varexConfig.GainMode}");
|
||||
return new VarexDetector(varexConfig, _eventAggregator, _logger);
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 创建 iRay 探测器 | Create iRay detector
|
||||
///// </summary>
|
||||
//private IAreaDetector CreateIRayDetector(DetectorConfig config)
|
||||
//{
|
||||
// var irayConfig = config as IRayDetectorConfig
|
||||
// ?? throw new ArgumentException("iRay 探测器需要 IRayDetectorConfig | iRay detector requires IRayDetectorConfig");
|
||||
|
||||
// return new IRayDetector(irayConfig, _eventAggregator);
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// 获取支持的探测器类型 | Get supported detector types
|
||||
/// </summary>
|
||||
public IEnumerable<DetectorType> GetSupportedTypes()
|
||||
{
|
||||
return new[] { DetectorType.Varex, DetectorType.IRay };
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using System.Collections.Generic;
|
||||
using XP.Hardware.Detector.Abstractions;
|
||||
using XP.Hardware.Detector.Abstractions.Enums;
|
||||
using XP.Hardware.Detector.Config;
|
||||
|
||||
namespace XP.Hardware.Detector.Factories
|
||||
{
|
||||
/// <summary>
|
||||
/// 探测器工厂接口 | Detector factory interface
|
||||
/// 根据配置创建探测器实例
|
||||
/// </summary>
|
||||
public interface IDetectorFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建探测器实例 | Create detector instance
|
||||
/// </summary>
|
||||
/// <param name="config">探测器配置 | Detector configuration</param>
|
||||
/// <returns>探测器实例或错误结果 | Detector instance or error result</returns>
|
||||
DetectorResult<IAreaDetector> CreateDetector(DetectorConfig config);
|
||||
|
||||
/// <summary>
|
||||
/// 获取支持的探测器类型 | Get supported detector types
|
||||
/// </summary>
|
||||
/// <returns>支持的类型列表 | List of supported types</returns>
|
||||
IEnumerable<DetectorType> GetSupportedTypes();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user