-
Notifications
You must be signed in to change notification settings - Fork 260
Expand file tree
/
Copy pathApp.xaml.cs
More file actions
93 lines (81 loc) · 3.49 KB
/
App.xaml.cs
File metadata and controls
93 lines (81 loc) · 3.49 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Linq;
using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.Core;
using Windows.UI.Xaml;
using CommunityToolkit.Mvvm.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using MvvmSampleUwp.Services;
using Refit;
using MvvmSampleUwp.Helpers;
using MvvmSample.Core.Services;
using MvvmSample.Core.ViewModels.Widgets;
using MvvmSample.Core.ViewModels;
namespace MvvmSampleUwp;
/// <summary>
/// Provides application-specific behavior to supplement the default <see cref="Application"/> class.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// 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().
/// </summary>
public App()
{
this.InitializeComponent();
}
/// <inheritdoc/>
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// Ensure the UI is initialized
if (Window.Current.Content is null)
{
Window.Current.Content = new Shell();
TitleBarHelper.StyleTitleBar();
TitleBarHelper.ExpandViewIntoTitleBar();
var serviceProvider = new ServiceCollection()
//Services
.AddSingleton<IDialogService, DialogService>()
.AddSingleton<IFilesService, FilesService>()
.AddSingleton<ISettingsService, SettingsService>()
.AddSingleton(RestService.For<IRedditService>("https://www.reddit.com/"))
//ViewModels
.AddTransient<PostWidgetViewModel>()
.AddTransient<SubredditWidgetViewModel>()
.AddTransient<AsyncRelayCommandPageViewModel>()
.AddTransient<IocPageViewModel>()
.AddTransient<MessengerPageViewModel>()
.AddTransient<ObservableObjectPageViewModel>()
.AddTransient<ObservableValidatorPageViewModel>()
.AddTransient<ValidationFormWidgetViewModel>()
.AddTransient<RelayCommandPageViewModel>()
.AddTransient<SamplePageViewModel>()
.BuildServiceProvider();
// Register services
Ioc.Default.ConfigureServices(serviceProvider);
ViewModelLocator.SetViewModelFactory(view =>
{
var viewName = view.GetType().Name;
var viewModelName = $"{viewName}ViewModel";
var viewModelType = typeof(SamplePageViewModel).Assembly.GetTypes().FirstOrDefault(x => x.Name == viewModelName);
if (viewModelType == null)
{
if (viewModelName.Contains("Messenger"))
viewModelType = typeof(MessengerPageViewModel);
else
viewModelType = typeof(SamplePageViewModel);
}
return serviceProvider.GetService(viewModelType);
});
}
// Enable the prelaunch if needed, and activate the window
if (e.PrelaunchActivated == false)
{
CoreApplication.EnablePrelaunch(true);
Window.Current.Activate();
}
}
}