54 lines
2.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|