Files
XplorePlane/XP.Hardware.Detector/Module/DetectorModule.cs
T

108 lines
4.8 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 Prism.Ioc;
using Prism.Modularity;
using System;
using System.Resources;
using System.Threading.Tasks;
using System.Windows;
using XP.Common.Localization;
using XP.Common.Localization.Interfaces;
using XP.Common.Logging.Interfaces;
using XP.Hardware.Detector.Factories;
using XP.Hardware.Detector.Services;
namespace XP.Hardware.Detector.Module
{
/// <summary>
/// 探测器模块 | Detector Module
/// Prism 模块入口,注册服务/工厂/事件到 Unity 容器 | Prism module entry, register services/factories/events to Unity container
/// </summary>
[Module(ModuleName = "DetectorModule")]
public class DetectorModule : IModule
{
private ILoggerService _logger = null!;
/// <summary>
/// 模块初始化 | Module initialization
/// </summary>
public void OnInitialized(IContainerProvider containerProvider)
{
// 注册模块级多语言资源到 Fallback Chain | Register module-level localization resources to Fallback Chain
var localizationService = containerProvider.Resolve<ILocalizationService>();
var resourceManager = new ResourceManager(
"XP.Hardware.Detector.Resources.Resources",
typeof(DetectorModule).Assembly);
localizationService.RegisterResourceSource("XP.Hardware.Detector", resourceManager);
// 初始化 LocalizationHelper,使其通过 ILocalizationService 获取字符串(支持 Fallback Chain
// Initialize LocalizationHelper to use ILocalizationService for string lookup (supports Fallback Chain)
LocalizationHelper.Initialize(localizationService);
// 获取日志服务 | Get logger service
_logger = containerProvider.Resolve<ILoggerService>().ForModule<DetectorModule>();
// 自动初始化探测器服务 | Auto-initialize detector service
var detectorService = containerProvider.Resolve<IDetectorService>();
_ = InitializeDetectorAsync(detectorService);
_logger.Info("模块已初始化 | Module initialized");
}
/// <summary>
/// 异步初始化探测器 | Async initialize detector
/// </summary>
private async Task InitializeDetectorAsync(IDetectorService detectorService)
{
try
{
_logger.Info("开始自动连接探测器 | Starting auto connection to detector");
// 初始化探测器 | Initialize detector
var initResult = await detectorService.InitializeAsync();
if (!initResult.IsSuccess)
{
_logger.Error(initResult.Exception, $"探测器初始化失败 | Detector initialization failed: {initResult.ErrorMessage}");
//MessageBox.Show($"探测器初始化失败:{initResult.ErrorMessage}",
// "错误 | Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
_logger.Info("探测器连接成功 | Detector connected successfully");
// 启动连续采集 | Start continuous acquisition
var acquireResult = await detectorService.StartAcquisitionAsync();
if (!acquireResult.IsSuccess)
{
_logger.Error(acquireResult.Exception, $"启动采集失败 | Start acquisition failed: {acquireResult.ErrorMessage}");
MessageBox.Show($"启动采集失败:{acquireResult.ErrorMessage}",
"错误 | Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
_logger.Info("连续采集已启动 | Continuous acquisition started");
}
}
catch (Exception ex)
{
_logger.Error(ex, "自动初始化异常 | Auto initialization exception: {Message}", ex.Message);
MessageBox.Show($"自动初始化异常:{ex.Message}",
"错误 | Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
/// <summary>
/// 注册类型到 DI 容器 | Register types to DI container
/// </summary>
public void RegisterTypes(IContainerRegistry containerRegistry)
{
// 注册工厂层(Transient| Register factory layer (Transient)
containerRegistry.Register<IDetectorFactory, DetectorFactory>();
// 注册服务层(Singleton| Register service layer (Singleton)
containerRegistry.RegisterSingleton<IDetectorService, DetectorService>();
// 注册图像服务(Singleton| Register image service (Singleton)
containerRegistry.RegisterSingleton<IImageService, ImageService>();
}
}
}