using Prism.Ioc; using Prism.Modularity; using System; using System.Configuration; using System.Resources; using XP.Common.Localization; using XP.Common.Localization.Interfaces; using XP.Hardware.MotionControl.Abstractions; using XP.Hardware.MotionControl.Config; using XP.Hardware.MotionControl.Implementations; using XP.Hardware.MotionControl.Services; namespace XP.Hardware.MotionControl.Module { /// /// 运动控制 Prism 模块 | Motion Control Prism Module /// 负责注册运动控制相关服务到 DI 容器,并在初始化时注册多语言资源和启动轮询 /// Registers motion control services to DI container, registers localization resources and starts polling on initialization /// [Module(ModuleName = "MotionControlModule")] public class MotionControlModule : IModule { /// /// 注册类型到 DI 容器 | Register types to DI container /// /// 容器注册器 | Container registry public void RegisterTypes(IContainerRegistry containerRegistry) { // 加载配置(单例)| Load configuration (singleton) var config = ConfigLoader.LoadConfig(); containerRegistry.RegisterInstance(config); // 注册几何计算器(单例)| Register geometry calculator (singleton) containerRegistry.RegisterSingleton(); // 根据配置选择运动系统实现 | Select motion system implementation based on config var motionType = ConfigurationManager.AppSettings["MotionControl:Type"] ?? "PLC"; if (motionType.Equals("Simulated", StringComparison.OrdinalIgnoreCase)) { containerRegistry.RegisterSingleton(); System.Console.WriteLine("[MotionControlModule] [Simulated] 使用虚拟运动系统 | Using simulated motion system"); } else { containerRegistry.RegisterSingleton(); System.Console.WriteLine("[MotionControlModule] 使用PLC运动系统 | Using PLC motion system"); } // 注册运动控制业务服务(单例)| Register motion control service (singleton) containerRegistry.RegisterSingleton(); System.Console.WriteLine("[MotionControlModule] 类型注册完成 | Type registration completed"); } /// /// 模块初始化 | Module initialization /// /// 容器提供者 | Container provider 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.MotionControl.Resources.Resources", typeof(MotionControlModule).Assembly); localizationService.RegisterResourceSource("XP.Hardware.MotionControl", resourceManager); // 初始化 LocalizationHelper,使其通过 ILocalizationService 获取字符串(支持 Fallback Chain) // Initialize LocalizationHelper to use ILocalizationService for string lookup (supports Fallback Chain) LocalizationHelper.Initialize(localizationService); // 启动状态轮询(虚拟模式和 PLC 模式均需要,用于驱动 UI 位置更新事件) // Start status polling (needed for both simulated and PLC modes to drive UI position update events) var motionService = containerProvider.Resolve(); motionService.StartPolling(); var motionSystem = containerProvider.Resolve(); if (motionSystem is SimulatedMotionSystem) { System.Console.WriteLine("[MotionControlModule] [Simulated] 轮询已启动(虚拟模式)| Polling started (simulated mode)"); } else { System.Console.WriteLine("[MotionControlModule] PLC 轮询已启动 | PLC polling started"); } System.Console.WriteLine("[MotionControlModule] 模块已初始化 | Module initialized"); } } }