From 0c3a9172688f72c8bfe74c890f9a4dbf6ba82f59 Mon Sep 17 00:00:00 2001 From: Drombeys Date: Fri, 26 Apr 2024 18:59:43 +0300 Subject: [PATCH] Decompose `ConfigureServices` method --- src/ImeSense.Launchers.Belarus/App.axaml.cs | 75 ++---------- .../Injection/ServiceCollectionExtensions.cs | 108 ++++++++++++++++++ 2 files changed, 117 insertions(+), 66 deletions(-) create mode 100644 src/ImeSense.Launchers.Belarus/Injection/ServiceCollectionExtensions.cs diff --git a/src/ImeSense.Launchers.Belarus/App.axaml.cs b/src/ImeSense.Launchers.Belarus/App.axaml.cs index fb10a18..08dbeed 100644 --- a/src/ImeSense.Launchers.Belarus/App.axaml.cs +++ b/src/ImeSense.Launchers.Belarus/App.axaml.cs @@ -1,26 +1,20 @@ -using System.Net.Http.Headers; - using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; - -using ImeSense.Launchers.Belarus.Manager; using ImeSense.Launchers.Belarus.Models; using ImeSense.Launchers.Belarus.Services; using ImeSense.Launchers.Belarus.ViewModels; -using ImeSense.Launchers.Belarus.ViewModels.Validators; using ImeSense.Launchers.Belarus.Views; using ImeSense.Launchers.Belarus.Core.FileHashVerification; using ImeSense.Launchers.Belarus.Core.Manager; -using ImeSense.Launchers.Belarus.Core.Models; -using ImeSense.Launchers.Belarus.Core.Services; using ImeSense.Launchers.Belarus.Core.Storage; -using ImeSense.Launchers.Belarus.Core.Validators; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; +using ImeSense.Launchers.Belarus.Injection; +using ImeSense.Launchers.Belarus.Core.Services; namespace ImeSense.Launchers.Belarus; @@ -34,79 +28,27 @@ public App() .BuildServiceProvider(); } - private IServiceCollection ConfigureServices() + private static ServiceCollection ConfigureServices() { var services = new ServiceCollection(); services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true)); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - services.AddSingleton(); - - services.AddTransient(); - - services.AddHttpClient() - .ConfigurePrimaryHttpMessageHandler(() => - { - return new HttpClientHandler { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12 - }; ; - }) - .ConfigureHttpClient(ConfigureClient); - services.AddHttpClient() - .ConfigurePrimaryHttpMessageHandler(() => { - return new HttpClientHandler { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12 - }; ; - }) - .ConfigureHttpClient(ConfigureClient); + services.AddPresetationServices(); + services.AddValidators(); + services.AddManagers(); + services.AddServices(); services.AddTransient(); - services.AddTransient(); - services.AddTransient(); services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + services.AddTransient(); services.AddSingleton(); - services.AddSingleton(); - services.AddTransient, ReleaseComparerService>(); - services.AddTransient(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - - services.AddTransient(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); return services; } - private static void ConfigureClient(HttpClient httpClient) - { - httpClient.BaseAddress = UriStorage.BelarusApiUri; - httpClient.DefaultRequestHeaders.Accept.Clear(); - httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); - httpClient.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter"); - } public override void Initialize() { @@ -116,6 +58,7 @@ public override void Initialize() AvaloniaXamlLoader.Load(this); } catch (Exception exception) { logger.LogCritical("{Message}", exception.Message); + logger.LogInformation("{StackTrace}", exception.StackTrace); throw; } } diff --git a/src/ImeSense.Launchers.Belarus/Injection/ServiceCollectionExtensions.cs b/src/ImeSense.Launchers.Belarus/Injection/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..802c82d --- /dev/null +++ b/src/ImeSense.Launchers.Belarus/Injection/ServiceCollectionExtensions.cs @@ -0,0 +1,108 @@ +using System.Net.Http.Headers; + +using ImeSense.Launchers.Belarus.Core.Manager; +using ImeSense.Launchers.Belarus.Core.Models; +using ImeSense.Launchers.Belarus.Core.Services; +using ImeSense.Launchers.Belarus.Core.Storage; +using ImeSense.Launchers.Belarus.Core.Validators; +using ImeSense.Launchers.Belarus.Manager; +using ImeSense.Launchers.Belarus.ViewModels; +using ImeSense.Launchers.Belarus.ViewModels.Validators; +using ImeSense.Launchers.Belarus.Views; + +using Microsoft.Extensions.DependencyInjection; + +namespace ImeSense.Launchers.Belarus.Injection; + +internal static class ServiceCollectionExtensions +{ + public static IServiceCollection AddManagers(this IServiceCollection services) + { + services.AddSingleton(); + services.AddHttpClient() + .ConfigurePrimaryHttpMessageHandler(() => { + return new HttpClientHandler { + SslProtocols = System.Security.Authentication.SslProtocols.Tls12 + }; ; + }).ConfigureHttpClient(ConfigureClient); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + return services; + } + + public static IServiceCollection AddServices(this IServiceCollection services) + { + services.AddHttpClient() + .ConfigurePrimaryHttpMessageHandler(() => + { + return new HttpClientHandler { + SslProtocols = System.Security.Authentication.SslProtocols.Tls12 + }; ; + }) + .ConfigureHttpClient(ConfigureClient); + services.AddTransient, ReleaseComparerService>(); + services.AddTransient(); + services.AddTransient(); + + return services; + } + + public static IServiceCollection AddPresetationServices(this IServiceCollection services) + { + services.AddViewModels(); + services.AddViews(); + + return services; + } + + public static IServiceCollection AddViewModels(this IServiceCollection services) + { + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddSingleton(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddSingleton(); + services.AddSingleton(); + + return services; + } + + public static IServiceCollection AddViews(this IServiceCollection services) + { + services.AddTransient(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddTransient(); + services.AddTransient(); + services.AddSingleton(); + + return services; + } + + public static IServiceCollection AddValidators(this IServiceCollection services) + { + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + return services; + } + + private static void ConfigureClient(HttpClient httpClient) + { + httpClient.BaseAddress = UriStorage.BelarusApiUri; + httpClient.DefaultRequestHeaders.Accept.Clear(); + httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); + httpClient.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter"); + } + +}