From eee9ca60ee26406bcde64525e0960feaec475e5f Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Mon, 6 Apr 2026 09:20:39 +0100 Subject: [PATCH] Refactor service registration in MauiAppBuilderExtensions Modularize service registrations by introducing extension methods for configuration, authentication, transaction, and merchant services. Reorganize the order of service registrations for clarity, simplify Func singleton registration, and reformat RegisterHttpClientX for consistency. Improves code readability and maintainability. --- .../Extensions/MauiAppBuilderExtensions.cs | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs index 1fdf9431..19bdaa19 100644 --- a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs +++ b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs @@ -67,8 +67,7 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { return factory.CreateClient("default"); }); - builder.Services.AddSingleton>( - new Func(configSetting => { + builder.Services.AddSingleton(new Func(configSetting => { IApplicationCache applicationCache = MauiProgram.Container.Services.GetService(); if (applicationCache != null) @@ -91,22 +90,41 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddSingleton>(new Func(useTrainingMode => + builder.RegisterConfigurationService().RegisterAuthenticationService().RegisterTransactionService().RegisterMerchantService(); + + builder.Services.RegisterHttpClientX(); + builder.Services.AddSingleton(); + + builder.ConfigureDeviceIdProvider(); + + return builder; + } + + private static MauiAppBuilder RegisterConfigurationService(this MauiAppBuilder builder) { + builder.Services.AddSingleton(new Func(useTrainingMode => { return useTrainingMode switch { true => new TrainingConfigurationService(), _ => MauiProgram.Container.Services.GetService() } ?? throw new InvalidOperationException("Failed to resolve IConfigurationService."); })); + return builder; + } + private static MauiAppBuilder RegisterAuthenticationService(this MauiAppBuilder builder) + { builder.Services.AddSingleton(new Func(useTrainingMode => { - return useTrainingMode switch { + return useTrainingMode switch + { true => new TrainingAuthenticationService(), _ => MauiProgram.Container.Services.GetService() } ?? throw new InvalidOperationException("Failed to resolve IConfigurationService."); })); + return builder; + } - builder.Services.AddSingleton>(new Func(useTrainingMode => + private static MauiAppBuilder RegisterTransactionService(this MauiAppBuilder builder) { + builder.Services.AddSingleton(new Func(useTrainingMode => { return useTrainingMode switch { @@ -114,8 +132,12 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { _ => MauiProgram.Container.Services.GetService() } ?? throw new InvalidOperationException("Failed to resolve ITransactionService."); })); - - builder.Services.AddSingleton>(new Func(useTrainingMode => + return builder; + } + + private static MauiAppBuilder RegisterMerchantService(this MauiAppBuilder builder) + { + builder.Services.AddSingleton(new Func(useTrainingMode => { return useTrainingMode switch { @@ -123,12 +145,6 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { _ => MauiProgram.Container.Services.GetService() } ?? throw new InvalidOperationException("Failed to resolve ITransactionService."); })); - - builder.Services.RegisterHttpClientX(); - builder.Services.AddSingleton(); - - builder.ConfigureDeviceIdProvider(); - return builder; } @@ -280,8 +296,7 @@ public static MauiAppBuilder ConfigurePages(this MauiAppBuilder builder) { #endregion - public static IHttpClientBuilder RegisterHttpClientX( - this IServiceCollection services) + public static IHttpClientBuilder RegisterHttpClientX(this IServiceCollection services) where TInterface : class where TImplementation : class, TInterface {