using System.Net.Http; using Marechai.App.Presentation.ViewModels; using Marechai.App.Presentation.Views; using Marechai.App.Services; using Marechai.App.Services.Caching; using Microsoft.UI.Xaml; using Uno.Extensions; using Uno.Extensions.Configuration; using Uno.Extensions.Hosting; using Uno.Extensions.Http; using Uno.Extensions.Localization; using Uno.Extensions.Navigation; using Uno.UI; using CompanyDetailViewModel = Marechai.App.Presentation.ViewModels.CompanyDetailViewModel; using ComputersListViewModel = Marechai.App.Presentation.ViewModels.ComputersListViewModel; using ComputersViewModel = Marechai.App.Presentation.ViewModels.ComputersViewModel; using GpuDetailViewModel = Marechai.App.Presentation.ViewModels.GpuDetailViewModel; using GpuListViewModel = Marechai.App.Presentation.ViewModels.GpusListViewModel; using MachineViewViewModel = Marechai.App.Presentation.ViewModels.MachineViewViewModel; using MainViewModel = Marechai.App.Presentation.ViewModels.MainViewModel; using NewsViewModel = Marechai.App.Presentation.ViewModels.NewsViewModel; using PhotoDetailViewModel = Marechai.App.Presentation.ViewModels.PhotoDetailViewModel; using ProcessorDetailViewModel = Marechai.App.Presentation.ViewModels.ProcessorDetailViewModel; using ProcessorsListViewModel = Marechai.App.Presentation.ViewModels.ProcessorsListViewModel; namespace Marechai.App; public partial class App : Application { /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// public App() { InitializeComponent(); } protected Window? MainWindow { get; private set; } public IHost? Host { get; private set; } protected override async void OnLaunched(LaunchActivatedEventArgs args) { IApplicationBuilder builder = this.CreateBuilder(args) // Add navigation support for toolkit controls such as TabBar and NavigationView .UseToolkitNavigation() .Configure(host => host #if DEBUG // Switch to Development environment when running in DEBUG .UseEnvironment(Environments.Development) #endif .UseLogging((context, logBuilder) => { // Configure log levels for different categories of logging logBuilder .SetMinimumLevel(context .HostingEnvironment .IsDevelopment() ? LogLevel.Information : LogLevel.Warning) // Default filters for core Uno Platform namespaces .CoreLogLevel(LogLevel.Warning); // Uno Platform namespace filter groups // Uncomment individual methods to see more detailed logging //// Generic Xaml events //logBuilder.XamlLogLevel(LogLevel.Debug); //// Layout specific messages //logBuilder.XamlLayoutLogLevel(LogLevel.Debug); //// Storage messages //logBuilder.StorageLogLevel(LogLevel.Debug); //// Binding related messages //logBuilder.XamlBindingLogLevel(LogLevel.Debug); //// Binder memory references tracking //logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug); //// DevServer and HotReload related //logBuilder.HotReloadCoreLogLevel(LogLevel.Information); //// Debug JS interop //logBuilder.WebAssemblyLogLevel(LogLevel.Debug); }, true) .UseSerilog(true, true) .UseConfiguration(configure: configBuilder => configBuilder.EmbeddedSource() .Section()) // Enable localization (see appsettings.json for supported languages) .UseLocalization() .UseHttp((context, services) => { #if DEBUG // DelegatingHandler will be automatically injected services .AddTransient(); #endif services.AddKiotaClientV2(context, new EndpointOptions { Url = context.Configuration .GetSection("ApiClient:Url") .Value ?? // Fallback to a default URL if not configured "https://localhost:5023" }); }) .ConfigureServices((context, services) => { // Register application services services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services .AddSingleton(); services .AddSingleton(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); }) .UseNavigation(RegisterRoutes)); MainWindow = builder.Window; #if DEBUG MainWindow.UseStudio(); #endif MainWindow.SetWindowIcon(); Host = await builder.NavigateAsync(); } private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes) { views.Register(new ViewMap(ViewModel: typeof(ShellViewModel)), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new ViewMap(), new DataViewMap()); routes.Register(new RouteMap("", views.FindByViewModel(), Nested: [ new RouteMap("Main", views.FindByViewModel(), true, Nested: [ new RouteMap("News", views.FindByViewModel(), true), new RouteMap("computers", views.FindByViewModel(), Nested: [ new RouteMap("list-computers", views.FindByViewModel< ComputersListViewModel>()), new RouteMap("view", views.FindByViewModel< MachineViewViewModel>()) ]), new RouteMap("consoles", views.FindByViewModel(), Nested: [ new RouteMap("list-consoles", views.FindByViewModel< ConsolesListViewModel>()) ]), new RouteMap("companies", views.FindByViewModel(), Nested: [ new RouteMap("company-details", views.FindByViewModel< CompanyDetailViewModel>()) ]), new RouteMap("gpus", views.FindByViewModel(), Nested: [ new RouteMap("gpu-details", views.FindByViewModel< GpuDetailViewModel>()) ]), new RouteMap("processors", views.FindByViewModel(), Nested: [ new RouteMap("processor-details", views.FindByViewModel< ProcessorDetailViewModel>()) ]), new RouteMap("Second", views.FindByViewModel()) ]) ])); } }