FileTranslation/App.axaml.cs

77 lines
3.0 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using FileTranslation.Core;
using FileTranslation.Scripts;
using FileTranslation.Services;
using FileTranslation.ViewModels;
using FileTranslation.Views;
namespace FileTranslation;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
if (!this.Resources.MergedDictionaries.TryGetValue(AppResources.Global, out var globalDic) || globalDic is not IResourceDictionary globalResourceDictionary)
{
throw new NullReferenceException(nameof(globalResourceDictionary));
}
AppResources.GlobalResources = globalResourceDictionary;
if (!this.Resources.MergedDictionaries.TryGetValue(AppResources.Icons, out var iconDic) || iconDic is not IResourceDictionary iconResourceDictionary)
{
throw new NullReferenceException(nameof(iconResourceDictionary));
}
AppResources.IconResources = iconResourceDictionary;
if (!this.Resources.MergedDictionaries.TryGetValue(AppResources.Convertors, out var convertorDic) || convertorDic is not IResourceDictionary convertersResourceDictionary)
{
throw new NullReferenceException(nameof(convertersResourceDictionary));
}
AppResources.ConvertorResources = convertersResourceDictionary;
if (!this.Resources.MergedDictionaries.TryGetValue(AppResources.GlobalTemplates, out var globalStylesDic) || globalStylesDic is not IResourceDictionary globalStylesResourceDictionary)
{
throw new NullReferenceException(nameof(globalStylesResourceDictionary));
}
AppResources.GlobalTemplatesResources = globalStylesResourceDictionary;
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
// Line below is needed to remove Avalonia data validation.
// Without this line you will get duplicate validations from both Avalonia and CT
BindingPlugins.DataValidators.RemoveAt(0);
IServices services = new Services.Services();
Global.services = services;
IMainService mainService = new MainService();
ISettingService settingService = new SettingService();
INetService netService = new NetService(services);
services.AddSingleton(mainService);
services.AddSingleton(settingService);
services.AddSingleton(netService);
services.AddSingleton((IDispatcherService)new DispatcherService());
settingService.Load();
desktop.MainWindow = new MainWindowView
{
DataContext = new MainWindowViewModel(services),
};
}
base.OnFrameworkInitializationCompleted();
}
}
public class Global
{
public static IServices services { get; set; }
}