Files
XplorePlane/XP.ReportEngine/ReportEngineModule.cs
T

99 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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");
}
}
}