/
rezvich
/
Prik
Обзор
Документация
Войти
/
rezvich
/
Prik
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Program.cs
127 строк
4 KB
rezvich
подправил логику
03 авг 2026, 17:51
03 авг 2026, 17:51
3ae2ecb
Код
Авторство
О чём код?
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Http.Resilience; using prik; using prik.Application; using prik.Infrastructure.Auth; using prik.Infrastructure.Db; using prik.Infrastructure.Export; using prik.Infrastructure.Files; using prik.Infrastructure.Refs; using prik.Infrastructure.Settings; using prik.Infrastructure.Soap; using prik.Infrastructure.Transform; using Serilog; using System.Text; Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var builder = Host.CreateApplicationBuilder(args); // Serilog Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .WriteTo.Console() .WriteTo.File("logs/pipeline-.log", rollingInterval: RollingInterval.Day) .CreateLogger(); builder.Services.AddSerilog(); // config bind var cfg = new AppSettings(); builder.Configuration.Bind(cfg); builder.Services.AddSingleton(cfg); builder.Services.AddSingleton(TimeProvider.System); // TokenService client (named) builder.Services.AddHttpClient("tokenService", http => { http.BaseAddress = new Uri(cfg.TokenService.BaseUrl); http.Timeout = Timeout.InfiniteTimeSpan; }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator }) .AddStandardResilienceHandler(options => { options.TotalRequestTimeout.Timeout = TimeSpan.FromMinutes(2); options.AttemptTimeout.Timeout = TimeSpan.FromSeconds(30); options.CircuitBreaker.SamplingDuration = TimeSpan.FromMinutes(10); options.Retry.MaxRetryAttempts = 3; }); // singleton token provider with cache builder.Services.AddSingleton<IAccessTokenProvider>(sp => { var factory = sp.GetRequiredService<IHttpClientFactory>(); var http = factory.CreateClient("tokenService"); var log = sp.GetRequiredService<ILogger<RemoteAccessTokenProvider>>(); return new RemoteAccessTokenProvider(http, cfg.TokenService.ApiKey, log); }); // SOAP client (FERZL/ATTACH) builder.Services.AddHttpClient<ISoapClient, SoapClient>(http => { http.Timeout = Timeout.InfiniteTimeSpan; http.DefaultRequestHeaders.ExpectContinue = false; }) .ConfigurePrimaryHttpMessageHandler(() => { var h = new HttpClientHandler(); if (!cfg.Soap.VerifySsl) { h.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; } return h; }) .AddStandardResilienceHandler(options => { options.TotalRequestTimeout.Timeout = TimeSpan.FromMinutes(15); options.AttemptTimeout.Timeout = TimeSpan.FromMinutes(5); options.CircuitBreaker.SamplingDuration = TimeSpan.FromMinutes(10); options.Retry.MaxRetryAttempts = 3; options.Retry.DisableForUnsafeHttpMethods(); }); builder.Services.AddSingleton<FerzlParser>(); builder.Services.AddSingleton<IFerzlGateService, FerzlGateService>(); builder.Services.AddSingleton<IDbConnectionFactory, SqlConnectionFactory>(); builder.Services.AddSingleton<IPeopleRepository, PeopleRepository>(); builder.Services.AddSingleton<IIdentifyService, IdentifyService>(); builder.Services.AddSingleton<IPostIdentifyFlkService, PostIdentifyFlkService>(); builder.Services.AddSingleton<IInputFileScanner, InputFileScanner>(); builder.Services.AddSingleton<IDocNormalizer, DocNormalizer>(); builder.Services.AddSingleton<IPrikCsvReader, PrikCsvReader>(); builder.Services.AddSingleton<IPipelineService, PipelineService>(); builder.Services.AddSingleton<IAttachService, AttachService>(); builder.Services.AddSingleton<IRefFileResolver, RefFileResolver>(); builder.Services.AddSingleton<IExcelEnpListLoader, ExcelEnpListLoader>(); builder.Services.AddSingleton<ILpuRefsRepository, LpuRefsRepository>(); builder.Services.AddSingleton<ISmpAttachService, SmpAttachService>(); builder.Services.AddSingleton<IHistlpuRepository, HistlpuRepository>(); builder.Services.AddSingleton<IMoLogRepository, MoLogRepository>(); builder.Services.AddSingleton<IMoBufferWriter, MoBufferWriter>(); builder.Services.AddSingleton<IPersistResultsService, PersistResultsService>(); builder.Services.AddSingleton<IErrorExporter, ErrorExporter>(); builder.Services.AddSingleton<IFileArchiver, FileArchiver>(); builder.Services.AddHostedService<Worker>(); var host = builder.Build(); host.Run();