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");
}
}
}