using Prism.Ioc; using Prism.Modularity; using System.Resources; using XP.Common.Localization; using XP.Common.Localization.Interfaces; using XP.Common.Logging.Interfaces; using XP.ReportEngine.Configs; using XP.ReportEngine.Interfaces; using XP.ReportEngine.Services; using XP.ReportEngine.ViewModels; using XP.ReportEngine.Views; namespace XP.ReportEngine { /// /// 报告引擎模块 | Report Engine Module /// Prism 模块入口,注册报告生成相关服务到 DI 容器 /// Prism module entry, registers report generation services to DI container /// [Module(ModuleName = "ReportEngineModule")] public class ReportEngineModule : IModule { /// /// 模块初始化 | Module initialization /// 注册模块级多语言资源源 | Register module-level localization resource source /// public void OnInitialized(IContainerProvider containerProvider) { // 注册模块级多语言资源到 Fallback Chain | Register module-level localization resources to Fallback Chain var localizationService = containerProvider.Resolve(); var resourceManager = new ResourceManager( "XP.ReportEngine.Resources.Resources", typeof(ReportEngineModule).Assembly); localizationService.RegisterResourceSource("XP.ReportEngine", resourceManager); // 初始化 LocalizationHelper,使其通过 ILocalizationService 获取字符串(支持 Fallback Chain) // Initialize LocalizationHelper to use ILocalizationService for string lookup (supports Fallback Chain) LocalizationHelper.Initialize(localizationService); // 后台预热报告引擎(触发 iText7 初始化、字体加载、JIT 编译,避免首次生成卡顿) // Background warm-up report engine (triggers iText7 init, font loading, JIT to avoid first-run latency) var reportService = containerProvider.Resolve(); _ = System.Threading.Tasks.Task.Run(() => reportService.WarmUpAsync()); System.Console.WriteLine("[ReportEngineModule] 模块已初始化 | Module initialized"); } /// /// 注册类型到 DI 容器 | Register types to DI container /// public void RegisterTypes(IContainerRegistry containerRegistry) { // 注册配置加载器(瞬态)| Register config loader (transient) containerRegistry.Register(); // 加载并注册配置为单例 | Load and register config as singleton containerRegistry.RegisterSingleton(container => { var logger = container.Resolve(); var loader = new Configs.ConfigLoader(logger); return loader.LoadReportConfig(); }); // 注册报告生成器(瞬态)| Register report generator (transient) containerRegistry.Register(); // 注册报告生成器工厂(单例)| Register report generator factory (singleton) containerRegistry.RegisterSingleton(); // 注册报告服务门面(单例)| Register report service facade (singleton) containerRegistry.RegisterSingleton(); // 注册模板引擎(瞬态)| Register template engine (transient) containerRegistry.Register(); // 注册数据绑定器(瞬态)| Register data binder (transient) containerRegistry.Register(); // 注册排版引擎(瞬态)| Register layout engine (transient) containerRegistry.Register(); // 注册 PDF 渲染器(瞬态)| Register PDF renderer (transient) containerRegistry.Register(); // 注册数据适配器(瞬态)| Register data adapter (transient) containerRegistry.Register(); // 注册报告编号生成器(单例,维护每日计数器状态)| Register report ID generator (singleton, maintains daily counter state) containerRegistry.RegisterSingleton(); // 注册演示窗口 ViewModel 和 View | Register demo window ViewModel and View containerRegistry.Register(); containerRegistry.Register(); System.Console.WriteLine("[ReportEngineModule] 类型注册完成 | Type registration completed"); } } }