using System; using System.Collections.Generic; using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Repositories; using AsbCloudApp.Requests.ParserOptions; using AsbCloudApp.Services.Parsers; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.ExcelServices.Templates.WellOperations; using Microsoft.Extensions.DependencyInjection; namespace AsbCloudInfrastructure.Services.WellOperations.Factories; public class WellOperationParserFactory : IParserFactory<int, WellOperationDto> { private readonly IDictionary<int, Func<IParserService>> parsers; public WellOperationParserFactory(IServiceProvider serviceProvider) { var wellOperationRepository = serviceProvider.GetRequiredService<IWellOperationRepository>(); var categoryRepository = serviceProvider.GetRequiredService<IWellOperationCategoryRepository>(); parsers = new Dictionary<int, Func<IParserService>> { { WellOperation.IdOperationTypeFact, () => new WellOperationParser<WellOperationFactTemplate>(wellOperationRepository, categoryRepository) }, { WellOperation.IdOperationTypePlan, () => new WellOperationParser<WellOperationPlanTemplate>(wellOperationRepository, categoryRepository) } }; } public IParserService<WellOperationDto, TOptions> CreateParser<TOptions>(int id) where TOptions : IParserOptionsRequest { var parser = parsers[id].Invoke(); return parser as IParserService<WellOperationDto, TOptions> ?? throw new ArgumentNullException(nameof(id), "Не удалось распознать файл"); } }