using System; using System.Collections.Generic; using AsbCloudApp.Repositories; using AsbCloudApp.Requests.ExportOptions; using AsbCloudApp.Services; using AsbCloudApp.Services.Export; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.ExcelServices.Templates.WellOperations; using Microsoft.Extensions.DependencyInjection; namespace AsbCloudInfrastructure.Services.WellOperations.Factories; public class WellOperationExportServiceFactory : IExportServiceFactory<int> { private readonly IDictionary<int, Func<IExportService>> exportServices; public WellOperationExportServiceFactory(IServiceProvider serviceProvider) { var wellOperationRepository = serviceProvider.GetRequiredService<IWellOperationRepository>(); var wellService = serviceProvider.GetRequiredService<IWellService>(); exportServices = new Dictionary<int, Func<IExportService>> { { WellOperation.IdOperationTypeFact, () => new WellOperationExport<WellOperationFactTemplate>(wellOperationRepository, wellService) }, { WellOperation.IdOperationTypePlan, () => new WellOperationExport<WellOperationPlanTemplate>(wellOperationRepository, wellService) } }; } public IExportService<TOptions> CreateExportService<TOptions>(int id) where TOptions : IExportOptionsRequest { var parser = exportServices[id].Invoke(); return parser as IExportService<TOptions> ?? throw new ArgumentNullException(nameof(id), "Не удалось экспортировать файл"); } }