using System; using XP.Common.Logging.Interfaces; using XP.ReportEngine.Interfaces; using XP.ReportEngine.Models; namespace XP.ReportEngine.Services { /// /// 报告生成器工厂实现 | Report generator factory implementation /// 根据输出格式创建对应的报告生成器实例 /// Creates report generator instances based on output format /// public class ReportGeneratorFactory : IReportGeneratorFactory { private readonly ILoggerService _logger; private readonly IReportGenerator _pdfReportGenerator; /// /// 构造函数 | Constructor /// /// 日志服务 | Logger service /// PDF 报告生成器 | PDF report generator public ReportGeneratorFactory(ILoggerService logger, IReportGenerator pdfReportGenerator) { _logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger)); _pdfReportGenerator = pdfReportGenerator ?? throw new ArgumentNullException(nameof(pdfReportGenerator)); } /// /// 根据输出格式创建生成器 | Create generator by output format /// 当前仅支持 PDF 格式,未来可扩展 Excel/CSV /// Currently only supports PDF format, extensible for Excel/CSV in the future /// /// 输出格式 | Output format /// 对应格式的报告生成器 | Report generator for the specified format /// 当请求不支持的格式时抛出 | Thrown when unsupported format is requested public IReportGenerator Create(ReportOutputFormat format) { _logger.Info("创建报告生成器,格式: {Format} | Creating report generator, format: {Format}", format); switch (format) { case ReportOutputFormat.Pdf: return _pdfReportGenerator; default: var message = $"不支持的报告输出格式: {format} | Unsupported report output format: {format}"; _logger.Error(null, message); throw new NotSupportedException(message); } } } }