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 { /// /// 探测器模块 | Detector Module /// Prism 模块入口,注册服务/工厂/事件到 Unity 容器 | Prism module entry, register services/factories/events to Unity container /// [Module(ModuleName = "DetectorModule")] public class DetectorModule : IModule { private ILoggerService _logger = null!; /// /// 模块初始化 | Module initialization /// public void OnInitialized(IContainerProvider containerProvider) { // 注册模块级多语言资源到 Fallback Chain | Register module-level localization resources to Fallback Chain var localizationService = containerProvider.Resolve(); 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().ForModule(); // 自动初始化探测器服务 | Auto-initialize detector service var detectorService = containerProvider.Resolve(); _ = InitializeDetectorAsync(detectorService); _logger.Info("模块已初始化 | Module initialized"); } /// /// 异步初始化探测器 | Async initialize detector /// 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); } } /// /// 注册类型到 DI 容器 | Register types to DI container /// public void RegisterTypes(IContainerRegistry containerRegistry) { // 注册工厂层(Transient)| Register factory layer (Transient) containerRegistry.Register(); // 注册服务层(Singleton)| Register service layer (Singleton) containerRegistry.RegisterSingleton(); // 注册图像服务(Singleton)| Register image service (Singleton) containerRegistry.RegisterSingleton(); } } }