Files
Walleby/Wallet.Avalonia/App.axaml.cs
T
TheXamlGuy 9daebc7ba2 Codemaid
2024-07-17 21:43:58 +01:00

253 lines
14 KiB
C#

using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using FluentAvalonia.Core;
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 Wallet.Data;
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<WalletConfiguration>("Wallet:*")
.AddConfiguration<ItemConfiguration>("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<AppHandler>();
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime)
{
services.AddTemplate<MainWindowViewModel, MainWindow>("MainWindow");
}
services.AddHandler<WalletActivatedHandler>();
services.AddTransient(provider => Component.Create<WalletComponent>(provider, args =>
{
args.AddServices(services =>
{
services.AddTransient<IComparer<Item<(Guid, string)>>>(provider => Comparer<Item<(Guid, string)>>.Create((x, z) =>
StringComparer.CurrentCultureIgnoreCase.Compare(x.Value.Item2, z.Value.Item2)));
services.AddCache<Item<(Guid, string)>>();
services.AddTransient(_ =>
provider.GetServices<IConfigurationDescriptor<ItemConfiguration>>());
services.AddTransient<IWalletFactory, WalletFactory>();
services.AddTransient<IKeyGenerator, KeyGenerator>();
services.AddTransient<IEncryptor, AesEncryptor>();
services.AddTransient<IDecryptor, AesDecryptor>();
services.AddTransient<IPasswordHasher, PasswordHasher>();
services.AddTransient<IKeyDeriver, KeyDeriver>();
services.AddTransient<ISecurityKeyFactory, SecurityKeyFactory>();
services.AddTransient<IWalletDatabaseFactory, WalletDatabaseFactory>();
services.AddTransient<IWalletConnectionFactory, WalletConnectionFactory>();
services.AddTransient<IInitialization, WalletProfileImageInitializer>();
services.AddTransient<IItemConfigurationCollection, ItemConfigurationCollection>(provider =>
{
IEnumerable<IConfigurationDescriptor<ItemConfiguration>> items =
provider.GetServices<IConfigurationDescriptor<ItemConfiguration>>().OrderBy(x => x.Name) ??
Enumerable.Empty<IConfigurationDescriptor<ItemConfiguration>>();
return new ItemConfigurationCollection(items.ToDictionary(x => x.Name,
x => (Func<ItemConfiguration>)(() => x.Value)));
});
services.TryAddSingleton<IDecoratorService<ProfileImage<IImageDescriptor>>,
DecoratorService<ProfileImage<IImageDescriptor>>>();
services.TryAddSingleton<IDecoratorService<SecurityKey>, DecoratorService<SecurityKey>>();
services.TryAddSingleton<IDecoratorService<WalletConnection>, DecoratorService<WalletConnection>>();
services.AddTransient<IConnection>(provider => provider.GetRequiredService<IDecoratorService<WalletConnection>>().Value!);
services.AddDbContextFactory<WalletContext>();
services.AddHandler<CreateProfileImageHandler>();
services.AddHandler<QueryWalletHandler>();
services.AddHandler<ItemHandler>();
services.AddHandler<ItemImageHandler>();
services.AddHandler<CreateItemHandler>();
services.AddHandler<DeleteItemHandler>();
services.AddHandler<UpdateItemHander>();
services.AddHandler<UpdateItemStateHandler>();
services.AddHandler<CountCategoriesHandler>();
services.AddHandler<OpenWalletHandler>();
services.AddHandler<CloseWalletHandler>();
services.AddTemplate<WalletNavigationViewModel, WalletNavigationView>();
services.AddTemplate<CreateItemNavigationViewModel, CreateItemNavigationView>();
services.AddTemplate<AllNavigationViewModel, AllNavigationView>();
services.AddTemplate<FavouritesNavigationViewModel, FavouritesNavigationView>();
services.AddTemplate<CategoriesNavigationViewModel, CategoriesNavigationView>();
services.AddTemplate<CategoryNavigationViewModel, CategoryNavigationView>();
services.AddTemplate<ArchiveNavigationViewModel, ArchiveNavigationView>();
services.AddTemplate<OpenWalletViewModel, OpenWalletView>("OpenWallet");
services.AddScoped<ItemNavigationCollectionConfiguration>();
services.AddTemplate<WalletViewModel, WalletView>("Wallet");
services.AddTemplate<ItemNavigationCollectionViewModel, ItemNavigationCollectionView>("ItemCollection");
services.AddHandler<ItemNavigationCollectionViewModelActivatedHandler>();
services.AddTemplate<WalletHeaderViewModel, WalletHeaderView>("WalletHeader");
services.AddTemplate<BackActionViewModel, BackActionView>();
services.AddTemplate<SearchWalletActionViewModel, SearchWalletActionView>();
services.AddTemplate<ItemCategoryNavigationCollectionViewModel, ItemCategoryNavigationCollectionView>("ItemCategoryCollection");
services.AddTemplate<ItemCategoryNavigationViewModel, ItemCategoryNavigationView>();
services.AddHandler<CategoriesNavigationViewModelActivationHandler>();
services.AddHandler<ItemCategoryViewModelActivatedHandler>();
services.AddScoped<IDecoratorService<Item<(Guid, string)>>, DecoratorService<Item<(Guid, string)>>>();
services.AddTemplate<AddItemNavigationViewModel, AddItemNavigationView>();
services.AddTemplate<ItemNavigationViewModel, ItemNavigationView>();
services.AddHandler<ItemNavigationViewModelActivatedHandler>();
services.AddTemplate<EmptyItemCollectionViewModel, EmptyItemCollectionView>("EmptyItemCollection");
services.AddScoped<IDecoratorService<ItemHeaderConfiguration>, DecoratorService<ItemHeaderConfiguration>>();
services.AddScoped<IDecoratorService<ItemConfiguration>, DecoratorService<ItemConfiguration>>();
services.AddTemplate<ItemViewModel, ItemView>("Item");
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
services.AddTemplate<ItemContentViewModel, ItemContentView>();
services.AddHandler<ItemContentViewModelActivationHandler>();
services.AddHandler<ItemContentFromCategoryViewModelActivationHandler>();
services.AddTemplate<ItemSectionViewModel, ItemSectionView>();
services.AddTemplate<TextEntryViewModel, TextEntryView>();
services.AddTemplate<CreateCommentEntryViewModel, CreateCommentEntryView>();
services.AddTemplate<CommentEntryViewModel, CommentEntryView>();
services.AddTemplate<CommentEntryCollectionViewModel, CommentEntryCollectionView>();
services.AddTemplate<PasswordEntryViewModel, PasswordEntryView>();
services.AddTemplate<MaskedTextEntryViewModel, MaskedTextEntryView>();
services.AddTemplate<DropdownEntryCollectionViewModel, DropdownEntryCollectionView>();
services.AddTemplate<DateEntryViewModel, DateEntryView>();
services.AddTemplate<HyperlinkEntryViewModel, HyperlinkEntryView>();
services.AddTemplate<PinEntryViewModel, PinEntryView>();
services.AddTemplate<ItemCommandHeaderViewModel, ItemCommandHeaderView>("ItemCommandHeader");
services.AddTemplate<FavouriteItemActionViewModel, FavouriteItemActionView>();
services.AddTemplate<ConfirmItemActionViewModel, ConfirmItemActionView>();
services.AddTemplate<DismissItemActionViewModel, DismissItemActionView>();
services.AddTemplate<ArchiveItemActionViewModel, ArchiveItemActionView>();
services.AddTemplate<UnarchiveItemActionViewModel, UnarchiveItemActionView>();
services.AddTemplate<EditItemActionViewModel, EditItemActionView>();
services.AddTemplate<DeleteItemActionViewModel, DeleteItemActionView>();
services.AddHandler<ConfirmUpdateItemHandler>(nameof(ItemState.Write));
services.AddHandler<ConfirmCreateItemHandler>(nameof(ItemState.New));
services.AddHandler<ConfirmDeleteItemHandler>();
services.AddHandler<HyperlinkHandler>();
services.AddHandler<ItemChangedHandler>(ServiceLifetime.Singleton);
services.AddHandler<ArchiveItemHandler>();
services.AddHandler<UnarchiveItemHandler>();
services.AddHandler<FavouriteItemHandler>();
services.AddHandler<UnfavouriteItemHandler>();
services.AddHandler<TextEntryViewModelHandler>(nameof(TextEntryConfiguration));
services.AddHandler<CommentEntryCollectionViewModelHandler>(nameof(CommentEntryCollectionConfiguration));
services.AddHandler<PasswordEntryViewModelHandler>(nameof(PasswordEntryConfiguration));
services.AddHandler<MaskedTextEntryViewModelHandler>(nameof(MaskedTextEntryConfiguration));
services.AddHandler<DropdownEntryCollectionViewModelHandler>(nameof(DropdownEntryCollectionConfiguration));
services.AddHandler<DateEntryViewModelHandler>(nameof(DateEntryConfiguration));
services.AddHandler<HyperlinkEntryViewModelHandler>(nameof(HyperlinkEntryConfiguration));
services.AddHandler<PinEntryViewModelHandler>(nameof(PinEntryConfiguration));
services.AddHandler<ItemCreatedHandler>(ServiceLifetime.Singleton);
services.AddHandler<ItemModifiedHandler>(ServiceLifetime.Singleton);
});
})!);
services.AddTransient<IWalletHostFactory, WalletHostFactory>();
services.AddSingleton<IWalletHostCollection, WalletHostCollection>();
services.AddInitializer<WalletCollectionInitializer>();
services.AddHandler<CreateWalletHandler>();
services.AddHandler<CreateProfileImageHandler>();
services.AddTemplate<MainViewModel, MainView>("Main");
services.AddTemplate<WalletNavigationCollectionViewModel, WalletNavigationCollectionView>("Wallets");
services.AddHandler<WalletNavigationCollectionViewModelActivationHandler>();
services.AddTransient<FooterViewModel>();
services.AddTemplate<ManageNavigationViewModel, ManageNavigationView>();
services.AddTemplate<ManageViewModel, ManageView>("Manage");
services.AddTemplate<CreateWalletNavigationViewModel, CreateWalletNavigationView>();
services.AddTemplate<CreateWalletViewModel, CreateWalletView>("CreateWallet");
})
.Build();
await host.RunAsync();
}
}