From be798d1a54d6d8d9c15a56079b68b392ac8088b7 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Fri, 3 Apr 2026 15:32:56 +0100 Subject: [PATCH 1/3] Refactor service registration with switch expressions Refactored MauiAppBuilderExtensions to use switch expressions for service factory registrations, improving readability and error handling. Simplified lambda expressions, enhanced configuration value resolution, and made minor formatting improvements. Logic in GetHandler remains unchanged. --- .../Extensions/MauiAppBuilderExtensions.cs | 164 ++++++------------ 1 file changed, 50 insertions(+), 114 deletions(-) diff --git a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs index 9b51cd1d..ea3018ad 100644 --- a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs +++ b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs @@ -46,7 +46,7 @@ public static class MauiAppBuilderExtensions { public static MauiAppBuilder ConfigureDatabase(this MauiAppBuilder builder) { String connectionString = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "transactionpos1.db"); - Func< BusinessLogic.Database.LogLevel > logLevelFunc = new Func(() => BusinessLogic.Database.LogLevel.Warn); + Func< BusinessLogic.Database.LogLevel > logLevelFunc = () => BusinessLogic.Database.LogLevel.Warn; IDatabaseContext database = new DatabaseContext(connectionString, logLevelFunc); database.InitialiseDatabase(); @@ -56,10 +56,6 @@ public static MauiAppBuilder ConfigureDatabase(this MauiAppBuilder builder) { } public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { - //builder.Services.AddHttpClient() - // .AddHttpMessageHandler() - // .ConfigurePrimaryHttpMessageHandler(GetHandler); - builder.Services.AddHttpClient("default") .AddHttpMessageHandler() .ConfigurePrimaryHttpMessageHandler(GetHandler); @@ -72,61 +68,20 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { }); builder.Services.AddSingleton>( - new Func(configSetting => - { - IApplicationCache applicationCache = MauiProgram.Container.Services - .GetService(); - - if (configSetting == "ConfigServiceUrl") - { - String configHostUrl = applicationCache.GetConfigHostUrl(); - if (String.IsNullOrEmpty(configHostUrl) == false) - { - return configHostUrl; - } - //return "https://sferguson.ddns.net:9200"; - return "http://192.168.1.167:9200"; - } - - Configuration configuration = applicationCache.GetConfiguration(); - - if (configuration != null) - { - if (configSetting == "ApplicationUpdateServiceUrl") { - if (String.IsNullOrWhiteSpace(configuration.ApplicationUpdateUri) == false) - { - return configuration.ApplicationUpdateUri; - } - - String configHostUrl = applicationCache.GetConfigHostUrl(); - return configHostUrl ?? String.Empty; - } - - if (configSetting == "SecurityService") - { - return configuration.SecurityServiceUri; - } - - if (configSetting == "TransactionProcessorACL") - { - return configuration.TransactionProcessorAclUri; - } - - if (configSetting == "TransactionProcessorApi") - { - return configuration.TransactionProcessorUri; - } - - if (configSetting == "EstateReportingApi") - { - return configuration.EstateReportingUri; - } - - return string.Empty; - } - - return string.Empty; - })); + new Func(configSetting => { + IApplicationCache applicationCache = MauiProgram.Container.Services.GetService(); + + if (applicationCache != null) + return configSetting switch { + "ConfigHostUrl" => applicationCache.GetConfigHostUrl() ?? String.Empty, + "ApplicationUpdateServiceUrl" when String.IsNullOrWhiteSpace(applicationCache.GetConfiguration()?.ApplicationUpdateUri) == false => applicationCache.GetConfiguration().ApplicationUpdateUri, + "SecurityService" => applicationCache.GetConfiguration()?.SecurityServiceUri ?? String.Empty, + "TransactionProcessorACL" => applicationCache.GetConfiguration()?.TransactionProcessorAclUri ?? String.Empty, + "TransactionProcessorApi" => applicationCache.GetConfiguration()?.TransactionProcessorUri ?? String.Empty, + "EstateReportingApi" => applicationCache.GetConfiguration()?.EstateReportingUri ?? String.Empty, + _ => String.Empty + }; + })); builder.Services.AddSingleton(); builder.Services.AddSingleton(); @@ -135,53 +90,38 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { builder.Services.AddSingleton(); builder.Services.AddSingleton>(new Func(useTrainingMode => - { - if (useTrainingMode) - { - return new TrainingConfigurationService(); - } - else - { - return MauiProgram.Container.Services.GetService(); - } - })); - - builder.Services.AddSingleton>(new Func(useTrainingMode => - { - if (useTrainingMode) - { - return new TrainingAuthenticationService(); - } - else - { - return MauiProgram.Container.Services.GetService(); - } - })); + { + return useTrainingMode switch { + true => new TrainingConfigurationService(), + _ => MauiProgram.Container.Services.GetService() + } ?? throw new InvalidOperationException("Failed to resolve IConfigurationService."); + })); + + builder.Services.AddSingleton(new Func(useTrainingMode => { + return useTrainingMode switch { + true => new TrainingAuthenticationService(), + _ => MauiProgram.Container.Services.GetService() + } ?? throw new InvalidOperationException("Failed to resolve IConfigurationService."); + })); builder.Services.AddSingleton>(new Func(useTrainingMode => - { - if (useTrainingMode) - { - return new TrainingTransactionService(); - } - else - { - return MauiProgram.Container.Services.GetService(); - } - })); - + { + return useTrainingMode switch + { + true => new TrainingTransactionService(), + _ => MauiProgram.Container.Services.GetService() + } ?? throw new InvalidOperationException("Failed to resolve ITransactionService."); + })); + builder.Services.AddSingleton>(new Func(useTrainingMode => - { - if (useTrainingMode) - { - return new TrainingMerchantService(); - } - else - { - return MauiProgram.Container.Services.GetService(); - } - })); - + { + return useTrainingMode switch + { + true => new TrainingMerchantService(), + _ => MauiProgram.Container.Services.GetService() + } ?? throw new InvalidOperationException("Failed to resolve ITransactionService."); + })); + builder.Services.RegisterHttpClientX(); builder.Services.AddSingleton(); @@ -190,17 +130,13 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { return builder; } - public static HttpMessageHandler GetHandler() - { + public static HttpMessageHandler GetHandler() { #if ANDROID - CustomAndroidMessageHandler androidMessageHandler = new() - { - + CustomAndroidMessageHandler androidMessageHandler = new() { ServerCertificateCustomValidationCallback = (sender, - certificate, - chain, - errors) => true, - + certificate, + chain, + errors) => true, }; return androidMessageHandler; #else @@ -217,7 +153,7 @@ public static HttpMessageHandler GetHandler() return httpMessageHandler; #endif } - + public static MauiAppBuilder ConfigureUIServices(this MauiAppBuilder builder) { builder.Services.AddSingleton(); builder.Services.AddSingleton(); From 280a025ddf45cb49e882d59d7d66635fe0a97464 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Fri, 3 Apr 2026 15:40:59 +0100 Subject: [PATCH 2/3] :| --- .../Extensions/MauiAppBuilderExtensions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs index ea3018ad..d047a5c5 100644 --- a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs +++ b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs @@ -81,6 +81,8 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { "EstateReportingApi" => applicationCache.GetConfiguration()?.EstateReportingUri ?? String.Empty, _ => String.Empty }; + + return null; })); builder.Services.AddSingleton(); From 7002416ff4f64186c53e726aed85b43eafaf61b2 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Fri, 3 Apr 2026 16:22:48 +0100 Subject: [PATCH 3/3] :\ oops --- .../Services/ApplicationCache.cs | 6 +++++- .../Extensions/MauiAppBuilderExtensions.cs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/TransactionProcessor.Mobile.BusinessLogic/Services/ApplicationCache.cs b/TransactionProcessor.Mobile.BusinessLogic/Services/ApplicationCache.cs index b4082860..bed30b1d 100644 --- a/TransactionProcessor.Mobile.BusinessLogic/Services/ApplicationCache.cs +++ b/TransactionProcessor.Mobile.BusinessLogic/Services/ApplicationCache.cs @@ -100,7 +100,11 @@ public Guid GetMerchantId() public String GetConfigHostUrl() { - return this.TryGetValue("ConfigHostUrl"); + var url = this.TryGetValue("ConfigHostUrl"); + if (String.IsNullOrWhiteSpace(url)) { + return "http://192.168.1.163:9200"; + } + return url; } public void SetConfigHostUrl(String value, diff --git a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs index d047a5c5..1fdf9431 100644 --- a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs +++ b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs @@ -73,7 +73,7 @@ public static MauiAppBuilder ConfigureAppServices(this MauiAppBuilder builder) { if (applicationCache != null) return configSetting switch { - "ConfigHostUrl" => applicationCache.GetConfigHostUrl() ?? String.Empty, + "ConfigServiceUrl" => applicationCache.GetConfigHostUrl() ?? String.Empty, "ApplicationUpdateServiceUrl" when String.IsNullOrWhiteSpace(applicationCache.GetConfiguration()?.ApplicationUpdateUri) == false => applicationCache.GetConfiguration().ApplicationUpdateUri, "SecurityService" => applicationCache.GetConfiguration()?.SecurityServiceUri ?? String.Empty, "TransactionProcessorACL" => applicationCache.GetConfiguration()?.TransactionProcessorAclUri ?? String.Empty,