using LSFE.MobApp.Contracts; using LSFE.MobApp.Contracts.Doctor; using LSFE.MobApp.Entities; using LSFE.MobApp.Entities.Account; using LSFE.MobApp.Entities.Doctor; using LSFE.MobApp.Entities.Location; using LSFE.MobApp.Entities.Planning; using LSFE.MobApp.Helpers; using LSFE.MobApp.Pages.Admin; using LSFE.MobApp.Pages.Attendance; using LSFE.MobApp.Pages.Authentication; using LSFE.MobApp.Pages.CoveragePlan; using LSFE.MobApp.Pages.Utilities; using LSFE.MobApp.Services; using LSFE.MobApp.Services.Coverage; using LSFE.MobApp.Services.Doctor; using LSFE.MobApp.ViewModels; using LSFE.MobApp.ViewModels.Admin; using LSFE.MobApp.ViewModels.Authentication; using LSFE.MobApp.ViewModels.Coverage; using LSFE.MobApp.ViewModels.Utility; using LSFE.MobApp.Views.CoveragePlan; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.Reflection; namespace LSFE.MobApp { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); fonts.AddFont("Font-Awesome-7-Free-Solid-900.otf", "FontAwesome"); fonts.AddFont("materialdesignicons-webfont.ttf", "MaterialIconsRegular"); }); // Register logging builder.Services.AddLogging(); #if DEBUG builder.Logging.AddDebug(); #endif // Add HttpClient builder.Services.AddHttpClient("ApiClient") .ConfigurePrimaryHttpMessageHandler(() => { #if DEBUG return new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true }; #else return new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true }; #endif }); builder.Services.AddHttpClient(); // Add API and sync services builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(provider => { var apiClientFactory = provider.GetService(); var addressService = provider.GetService(); var institutionRepo = provider.GetService>(); var doctorRepo = provider.GetService>(); var attendanceRepo = provider.GetService>(); var productRepo = provider.GetService>(); var inventoryTransactionRepo = provider.GetService>(); var mrRawPlanRepo = provider.GetService>(); var userRepo = provider.GetService>(); var configuration = provider.GetService(); var fileDownloadService = provider.GetService(); // Create wrappers var institutionWrapper = new RepositoryWrapper(institutionRepo); var doctorWrapper = new RepositoryWrapper(doctorRepo); var attendanceWrapper = new RepositoryWrapper(attendanceRepo); var productWrapper = new RepositoryWrapper(productRepo); var inventoryWrapper = new RepositoryWrapper(inventoryTransactionRepo); var mrRawPlanWrapper = new RepositoryWrapper(mrRawPlanRepo); var userWrapper = new RepositoryWrapper(userRepo); return new SyncService(apiClientFactory, institutionWrapper, doctorWrapper, attendanceWrapper, productWrapper, inventoryWrapper, mrRawPlanWrapper, userWrapper, configuration,fileDownloadService, addressService); }); // Load appsettings.json from EmbeddedResource var assembly = Assembly.GetExecutingAssembly(); using var stream = assembly.GetManifestResourceStream("LSFE.MobApp.appsettings.json"); var configuration = new ConfigurationBuilder() .AddJsonStream(stream) .Build(); #region Register IConfiguration for DI builder.Configuration.AddConfiguration(configuration); builder.Services.AddSingleton(configuration); // Register database service builder.Services.AddSingleton(); // Register file download service builder.Services.AddSingleton(); #endregion #region Register IRepository wrappers dependencies builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient(provider => { var databaseService = provider.GetRequiredService(); var logger = provider.GetRequiredService>>(); return new Repository(databaseService.Database, logger); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); builder.Services.AddTransient>(provider => { var repo = provider.GetRequiredService>(); return new RepositoryWrapper(repo); }); #endregion #region Register Services builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddSingleton(); #endregion #region VM and Pages builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient();//binding for UI builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); // Register ViewModel builder.Services.AddTransient(); builder.Services.AddTransient(); #endregion return builder.Build(); } } }