using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Wallet.Data; using HotAvalonia; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; using Toolkit.Avalonia; using Toolkit.Foundation; using FluentAvalonia.Core; using Avalonia.Controls; namespace Wallet.Avalonia; public partial class App : Application { public override void Initialize() { this.EnableHotReload(); FAUISettings.SetAnimationsEnabledAtAppLevel(false); AvaloniaXamlLoader.Load(this); } public override async void OnFrameworkInitializationCompleted() { IHost? host = DefaultHostBuilder.Create() .AddConfiguration("Wallet:*") .AddConfiguration("Item:*") .AddConfiguration("Item:Bank Account", ItemConfiguration.BankAccount) .AddConfiguration("Item:Credit Card", ItemConfiguration.CreditCard) .AddConfiguration("Item:Document", ItemConfiguration.Document) .AddConfiguration("Item:Driving Licence", ItemConfiguration.DrivingLicence) .AddConfiguration("Item:Identity", ItemConfiguration.Identity) .AddConfiguration("Item:Login", ItemConfiguration.Login) .AddConfiguration("Item:Note", ItemConfiguration.Note) .AddConfiguration("Item:Password", ItemConfiguration.Password) .AddConfiguration("Item:Passport", ItemConfiguration.Passport) .AddConfiguration("Item:API Credentials", ItemConfiguration.ApiCredentials) .AddConfiguration("Item:Software License", ItemConfiguration.SoftwareLicense) .AddConfiguration("Item:Crypto", ItemConfiguration.CryptoWallet) .AddConfiguration("Item:Database", ItemConfiguration.Database) .AddConfiguration("Item:Membership", ItemConfiguration.Membership) .AddConfiguration("Item:Insurance Documents", ItemConfiguration.InsuranceDocuments) .AddConfiguration("Item:Utility", ItemConfiguration.Utility) .AddConfiguration("Item:Server", ItemConfiguration.Server) .AddConfiguration("Item:Education Record", ItemConfiguration.EducationRecord) .AddConfiguration("Item:Travel Documents", ItemConfiguration.TravelDocuments) .AddConfiguration("Item:Concert Ticket", ItemConfiguration.ConcertTicket) .ConfigureServices((context, services) => { services.AddAvalonia(); services.AddHandler(); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime) { services.AddTemplate("MainWindow"); } services.AddHandler(); services.AddTransient(provider => Component.Create(provider, args => { args.AddServices(services => { services.AddTransient>>(provider => Comparer>.Create((x, z) => StringComparer.CurrentCultureIgnoreCase.Compare(x.Value.Item2, z.Value.Item2))); services.AddCache>(); services.AddTransient(_ => provider.GetServices>()); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(provider => { IEnumerable> items = provider.GetServices>().OrderBy(x => x.Name) ?? Enumerable.Empty>(); return new ItemConfigurationCollection(items.ToDictionary(x => x.Name, x => (Func)(() => x.Value))); }); services.TryAddSingleton>, DecoratorService>>(); services.TryAddSingleton, DecoratorService>(); services.TryAddSingleton, DecoratorService>(); services.AddTransient(provider => provider.GetRequiredService>().Value!); services.AddDbContextFactory(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate("OpenWallet"); services.AddScoped(); services.AddTemplate("Wallet"); services.AddTemplate("ItemCollection"); services.AddHandler(); services.AddTemplate("WalletHeader"); services.AddTemplate(); services.AddTemplate(); services.AddTemplate("ItemCategoryCollection"); services.AddTemplate(); services.AddHandler(); services.AddHandler(); services.AddScoped>, DecoratorService>>(); services.AddTemplate(); services.AddTemplate(); services.AddHandler(); services.AddTemplate("EmptyItemCollection"); services.AddScoped, DecoratorService>(); services.AddScoped, DecoratorService>(); services.AddTemplate("Item"); services.AddTemplate(); services.AddTemplate(); services.AddHandler(); services.AddHandler(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate("ItemCommandHeader"); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); services.AddHandler(nameof(ItemState.Write)); services.AddHandler(nameof(ItemState.New)); services.AddHandler(); services.AddHandler(); services.AddHandler(ServiceLifetime.Singleton); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(); services.AddHandler(nameof(TextEntryConfiguration)); services.AddHandler(nameof(MultilineTextEntryConfiguration)); services.AddHandler(nameof(PasswordEntryConfiguration)); services.AddHandler(nameof(MaskedTextEntryConfiguration)); services.AddHandler(nameof(DropdownEntryConfiguration)); services.AddHandler(nameof(DateEntryConfiguration)); services.AddHandler(nameof(HyperlinkEntryConfiguration)); services.AddHandler(nameof(PinEntryConfiguration)); services.AddHandler(ServiceLifetime.Singleton); services.AddHandler(ServiceLifetime.Singleton); }); })!); services.AddTransient(); services.AddSingleton(); services.AddInitializer(); services.AddHandler(); services.AddHandler(); services.AddTemplate("Main"); services.AddTemplate("Wallets"); services.AddHandler(); services.AddTransient(); services.AddTemplate(); services.AddTemplate("Manage"); services.AddTemplate(); services.AddTemplate("CreateWallet"); }) .Build(); await host.RunAsync(); } }