示例(继承)
新建PersonsGetterServiceChild.cs
using Microsoft.Extensions.Logging;
using OfficeOpenXml;
using RepositoryContracts;
using Serilog;
using ServiceContracts.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Services
{
public class PersonsGetterServiceChild : PersonsGetterService
{
//private field
private readonly IPersonsRepository _personsRepository;
private readonly ILogger<PersonsGetterService> _logger;
private readonly IDiagnosticContext _diagnosticContext;
public PersonsGetterServiceChild(IPersonsRepository personsRepository,
ILogger<PersonsGetterService> logger, IDiagnosticContext diagnosticContext) :
base(personsRepository, logger, diagnosticContext)
{
_personsRepository = personsRepository;
_logger = logger;
_diagnosticContext = diagnosticContext;
}
public async override Task<MemoryStream> GetPersonsExcel()
{
MemoryStream memoryStream = new MemoryStream();
using (ExcelPackage excelPackage = new ExcelPackage(memoryStream))
{
ExcelWorksheet worksheet =
excelPackage.Workbook.Worksheets.Add("PersonsSheet");
worksheet.Cells["A1"].Value = nameof(PersonResponse.PersonName);
worksheet.Cells["B1"].Value = nameof(PersonResponse.Age);
worksheet.Cells["C1"].Value = nameof(PersonResponse.Gender);
using (ExcelRange headerCells = worksheet.Cells["A1:C1"])
{
headerCells.Style.Fill.PatternType =
OfficeOpenXml.Style.ExcelFillStyle.Solid;
headerCells.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
headerCells.Style.Font.Bold = true;
}
int row = 2;
List<PersonResponse> persons = (await
_personsRepository.GetAllPersonsAsync())
.Select(p => p.ToPersonResponse()).ToList();
foreach (PersonResponse person in persons)
{
worksheet.Cells[row, 1].Value = person.PersonName;
worksheet.Cells[row, 2].Value = person.Age;
worksheet.Cells[row, 3].Value = person.Gender;
row++;
}
worksheet.Cells[$"A1:C{row}"].AutoFitColumns();
await excelPackage.SaveAsync();
}
memoryStream.Position = 0;
return memoryStream;
}
}
}
更新ConfigureServicesExtension.cs
//services.AddScoped<IPersonsGetterService, PersonsGetterService>();
//services.AddScoped<IPersonsGetterService,
PersonsGetterServiceWithFewExcelFileds>();
services.AddScoped<IPersonsGetterService, PersonsGetterServiceChild>();
不推荐使用继承的方法,容易违背Liskov Substitution Principle(LSP)。
Gitee获取源码: