Files
XplorePlane/XP.ReportEngine/Services/ReportGeneratorFactory.cs

54 lines
2.4 KiB
C#

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