108 lines
4.8 KiB
C#
108 lines
4.8 KiB
C#
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>();
|
||
}
|
||
}
|
||
}
|