using Prism.Ioc; using Prism.Modularity; 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(); // 注册运动系统(单例)| Register motion system (singleton) containerRegistry.RegisterSingleton(); // 注册运动控制业务服务(单例)| 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 状态轮询 | Start PLC status polling var motionService = containerProvider.Resolve(); motionService.StartPolling(); System.Console.WriteLine("[MotionControlModule] 模块已初始化 | Module initialized"); } } }