using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using AutoMapper; using Microsoft.Extensions.DependencyInjection; using WotBlitzStatisticsPro.Common.Model; using WotBlitzStatisticsPro.DataAccess; using WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations; using WotBlitzStatisticsPro.Logic.Dictionaries; using WotBlitzStatisticsPro.Logic.Model; using WotBlitzStatisticsPro.Logic.Pipeline; using WotBlitzStatisticsPro.WgApiClient; [assembly: InternalsVisibleTo("WotBlitzStatisticsPro.Tests")] namespace WotBlitzStatisticsPro.Logic { public static class WotBlitzStatisticsLogicInstaller { public static void ConfigureServices(IServiceCollection services) { services.AddSingleton(); ConfigureDictionariesFactory(services); ConfigureOperationsFactory(services); WotBlitzStatisticsDataAccessInstaller.ConfigureServices(services); services.AddAutoMapper(typeof(WotBlitzStatisticsLogicInstaller)); services.AddHttpClient(); services.AddHttpClient(); services.AddHttpClient(); services.AddHttpClient(); services.AddHttpClient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); } private static void ConfigureDictionariesFactory(IServiceCollection services) { services.AddTransient(); services.AddTransient(); services.AddTransient(); RegisterDictionariesFactoryMethod(services); } internal static void RegisterDictionariesFactoryMethod(IServiceCollection services) { services.AddTransient(serviceProvider => dictionaryType => { return dictionaryType switch { DictionaryType.StaticDictionaries => serviceProvider.GetService()!, DictionaryType.Achievements => serviceProvider.GetService()!, DictionaryType.Vehicles => serviceProvider.GetService()!, _ => null }; }); } private static void ConfigureOperationsFactory(IServiceCollection services) { services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddSingleton(serviceProvider => new ServiceProviderOperationFactory(serviceProvider)); } } }