using PARR.BLL.Contracts.Interfaces; using PARR.BLL.Services.Interfaces; using PARR.DAL.DomainServices.Interfaces; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.Job; using PARR.TemplateGeneratorWorker.Services; using PARR.TemplateGeneratorWorker.Settings; namespace PARR.TemplateGeneratorWorker { public class Worker : BackgroundService { private readonly ILogger logger; private readonly IMqSettings mqSettings; private readonly IMqService mqService; private readonly IServiceProvider serviceProvider; private readonly ITransformService transformService; private readonly IValidatorService validatorService; private readonly IJobService jobService; private readonly IShortcodesService shortcodesService; private readonly ITemplateService templateService; public Worker( ILogger logger, MqSettings mqSettings, IMqService mqService, IServiceProvider serviceProvider ) { this.logger = logger; this.mqSettings = mqSettings; this.mqService = mqService; this.serviceProvider = serviceProvider; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var isConnected = await mqService.InitConsumerAsync(mqSettings, GenerateTemplateAsync); if (!isConnected) throw new Exception("Ошибка при подключении к RabbitMq"); } public override Task StopAsync(CancellationToken cancellationToken) { mqService.DisposeAsync().AsTask().Wait(); return base.StopAsync(cancellationToken); } private async Task GenerateTemplateAsync(string msg) { using (var scope = serviceProvider.CreateScope()) { var templateGenerator = scope.ServiceProvider.GetService(); if (templateGenerator == null) throw new Exception($"Не найден сервис: {nameof(ITemplateGenerator)}"); await templateGenerator.GenerateTemplateAsync(msg); } } } }