forked from kikipoulet/SukiUI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.axaml.cs
57 lines (47 loc) · 1.72 KB
/
App.axaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Templates;
using Avalonia.Markup.Xaml;
using Microsoft.Extensions.DependencyInjection;
using SukiUI.Demo.Common;
using SukiUI.Demo.Features;
using SukiUI.Demo.Services;
using System;
using System.Linq;
namespace SukiUI.Demo;
public partial class App : Application
{
private IServiceProvider? _provider;
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
_provider = ConfigureServices();
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
var viewLocator = _provider?.GetRequiredService<IDataTemplate>();
var mainVm = _provider?.GetRequiredService<SukiUIDemoViewModel>();
desktop.MainWindow = viewLocator?.Build(mainVm) as Window;
}
base.OnFrameworkInitializationCompleted();
}
private static ServiceProvider ConfigureServices()
{
var viewlocator = Current?.DataTemplates.First(x => x is ViewLocator);
var services = new ServiceCollection();
if (viewlocator is not null)
services.AddSingleton(viewlocator);
services.AddSingleton<PageNavigationService>();
// Viewmodels
services.AddSingleton<SukiUIDemoViewModel>();
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => !p.IsAbstract && typeof(DemoPageBase).IsAssignableFrom(p));
foreach (var type in types)
services.AddSingleton(typeof(DemoPageBase), type);
return services.BuildServiceProvider();
}
}