99 lines
4.8 KiB
C#
99 lines
4.8 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 报告引擎模块 | Report Engine Module
|
||
/// Prism 模块入口,注册报告生成相关服务到 DI 容器
|
||
/// Prism module entry, registers report generation services to DI container
|
||
/// </summary>
|
||
[Module(ModuleName = "ReportEngineModule")]
|
||
public class ReportEngineModule : IModule
|
||
{
|
||
/// <summary>
|
||
/// 模块初始化 | Module initialization
|
||
/// 注册模块级多语言资源源 | Register module-level localization resource source
|
||
/// </summary>
|
||
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.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<IReportService>();
|
||
_ = System.Threading.Tasks.Task.Run(() => reportService.WarmUpAsync());
|
||
|
||
System.Console.WriteLine("[ReportEngineModule] 模块已初始化 | Module initialized");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册类型到 DI 容器 | Register types to DI container
|
||
/// </summary>
|
||
public void RegisterTypes(IContainerRegistry containerRegistry)
|
||
{
|
||
// 注册配置加载器(瞬态)| Register config loader (transient)
|
||
containerRegistry.Register<Configs.ConfigLoader>();
|
||
|
||
// 加载并注册配置为单例 | Load and register config as singleton
|
||
containerRegistry.RegisterSingleton<ReportConfig>(container =>
|
||
{
|
||
var logger = container.Resolve<ILoggerService>();
|
||
var loader = new Configs.ConfigLoader(logger);
|
||
return loader.LoadReportConfig();
|
||
});
|
||
|
||
// 注册报告生成器(瞬态)| Register report generator (transient)
|
||
containerRegistry.Register<IReportGenerator, PdfReportGenerator>();
|
||
|
||
// 注册报告生成器工厂(单例)| Register report generator factory (singleton)
|
||
containerRegistry.RegisterSingleton<IReportGeneratorFactory, ReportGeneratorFactory>();
|
||
|
||
// 注册报告服务门面(单例)| Register report service facade (singleton)
|
||
containerRegistry.RegisterSingleton<IReportService, ReportService>();
|
||
|
||
// 注册模板引擎(瞬态)| Register template engine (transient)
|
||
containerRegistry.Register<ITemplateEngine, JsonTemplateEngine>();
|
||
|
||
// 注册数据绑定器(瞬态)| Register data binder (transient)
|
||
containerRegistry.Register<IDataBinder, ExpressionDataBinder>();
|
||
|
||
// 注册排版引擎(瞬态)| Register layout engine (transient)
|
||
containerRegistry.Register<ILayoutEngine, PageLayoutEngine>();
|
||
|
||
// 注册 PDF 渲染器(瞬态)| Register PDF renderer (transient)
|
||
containerRegistry.Register<IPdfRenderer, ITextPdfRenderer>();
|
||
|
||
// 注册数据适配器(瞬态)| Register data adapter (transient)
|
||
containerRegistry.Register<IReportDataAdapter, ProcessorDataAdapter>();
|
||
|
||
// 注册报告编号生成器(单例,维护每日计数器状态)| Register report ID generator (singleton, maintains daily counter state)
|
||
containerRegistry.RegisterSingleton<ReportIdGenerator>();
|
||
|
||
// 注册演示窗口 ViewModel 和 View | Register demo window ViewModel and View
|
||
containerRegistry.Register<ReportDemoViewModel>();
|
||
containerRegistry.Register<ReportDemoWindow>();
|
||
|
||
System.Console.WriteLine("[ReportEngineModule] 类型注册完成 | Type registration completed");
|
||
}
|
||
}
|
||
}
|