using System.Threading.Tasks;
public class GeneralReportRequest
public int Id { get; set; }
public object? OtherParams { get; set; }
public class GeneralReportResponse
public int ReportId { get; set; }
public DateTime ReportDate { get; set; }
public interface IReportGenerator
Task<GeneralReportResponse> GenerateAsync(GeneralReportRequest request);
public class Buro1ReportGenerator : IReportGenerator
public Task<GeneralReportResponse> GenerateAsync(GeneralReportRequest request)
throw new NotImplementedException();
public class Buro2ReportGenerator : IReportGenerator
public Task<GeneralReportResponse> GenerateAsync(GeneralReportRequest request)
throw new NotImplementedException();
private readonly Func<int, IReportGenerator> _reportGeneratorFactory;
public Program(Func<int, IReportGenerator> reportGeneratorFactory)
_reportGeneratorFactory = reportGeneratorFactory;
public async Task Run(GeneralReportRequest request)
var reportGenerator = _reportGeneratorFactory(request.Id);
var response = await reportGenerator.GenerateAsync(request);