using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using PARR.Core; using PARR.DAL; using PARR.Infrastructure; using PARR.TemplateMatcher.Services.Implementations; using PARR.TemplateMatcher.Services.Implemetaions; using PARR.TemplateMatcher.Services.Interfaces; using PARR.TemplateMatcher.Settings; namespace PARR.TemplateMatcher { public static class TemplateMatcherInstaller { public static void InstallTemplateMatcherSerivces(this IServiceCollection services, IConfiguration configuration) { services.AddDalServices(configuration); services.AddCoreServices(configuration); services.AddInfrastructureServices(configuration); var mqSettings = new MqSettings(); configuration.GetSection(nameof(MqSettings)).Bind(mqSettings); services.AddSingleton(mqSettings); var templateSettings = new TemplateSettings(); configuration.GetSection(nameof(TemplateSettings)).Bind(templateSettings); services.AddSingleton(templateSettings); // === 1. Singleton: Долгоживущие сервисы и обработчики очередей === services.AddSingleton(); // === 2. Scoped: Бизнес-логика и работа с БД (DbContext) === // Создаются заново для каждого сообщения из очереди (внутри CreateAsyncScope) services.AddScoped(); services.AddScoped(); services.AddScoped(); // Пайплайн аллокации шаблонов services.AddScoped(); services.AddScoped(); services.AddScoped(); // Пайплайн групповых шаблонов services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); // Валидаторы services.AddScoped(); services.AddScoped(); // === 3. Transient: Stateless утилиты и инфраструктура === // Легковесные сервисы без состояния, создаются по требованию services.AddTransient(); services.AddTransient(); } public static IConfigurationBuilder AddTemplateMatcherConfigurations(this IConfigurationBuilder builder, IServiceCollection services) { builder.AddDalConfigurations(services); return builder; } public static void AddTemplateMatcherSettings(this IServiceCollection services, IConfiguration configuration) { services.AddDallSettings(configuration); } } }