91 lines
4.5 KiB
C#
91 lines
4.5 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 运动控制 Prism 模块 | Motion Control Prism Module
|
||
/// 负责注册运动控制相关服务到 DI 容器,并在初始化时注册多语言资源和启动轮询
|
||
/// Registers motion control services to DI container, registers localization resources and starts polling on initialization
|
||
/// </summary>
|
||
[Module(ModuleName = "MotionControlModule")]
|
||
public class MotionControlModule : IModule
|
||
{
|
||
/// <summary>
|
||
/// 注册类型到 DI 容器 | Register types to DI container
|
||
/// </summary>
|
||
/// <param name="containerRegistry">容器注册器 | Container registry</param>
|
||
public void RegisterTypes(IContainerRegistry containerRegistry)
|
||
{
|
||
// 加载配置(单例)| Load configuration (singleton)
|
||
var config = ConfigLoader.LoadConfig();
|
||
containerRegistry.RegisterInstance(config);
|
||
|
||
// 注册几何计算器(单例)| Register geometry calculator (singleton)
|
||
containerRegistry.RegisterSingleton<GeometryCalculator>();
|
||
|
||
// 根据配置选择运动系统实现 | Select motion system implementation based on config
|
||
var motionType = ConfigurationManager.AppSettings["MotionControl:Type"] ?? "PLC";
|
||
if (motionType.Equals("Simulated", StringComparison.OrdinalIgnoreCase))
|
||
{
|
||
containerRegistry.RegisterSingleton<IMotionSystem, SimulatedMotionSystem>();
|
||
System.Console.WriteLine("[MotionControlModule] [Simulated] 使用虚拟运动系统 | Using simulated motion system");
|
||
}
|
||
else
|
||
{
|
||
containerRegistry.RegisterSingleton<IMotionSystem, PlcMotionSystem>();
|
||
System.Console.WriteLine("[MotionControlModule] 使用PLC运动系统 | Using PLC motion system");
|
||
}
|
||
|
||
// 注册运动控制业务服务(单例)| Register motion control service (singleton)
|
||
containerRegistry.RegisterSingleton<IMotionControlService, MotionControlService>();
|
||
|
||
System.Console.WriteLine("[MotionControlModule] 类型注册完成 | Type registration completed");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 模块初始化 | Module initialization
|
||
/// </summary>
|
||
/// <param name="containerProvider">容器提供者 | Container provider</param>
|
||
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.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<IMotionControlService>();
|
||
motionService.StartPolling();
|
||
|
||
var motionSystem = containerProvider.Resolve<IMotionSystem>();
|
||
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");
|
||
}
|
||
}
|
||
}
|