Skip to content

Commit 84b0393

Browse files
committed
Use dependency injection for setting page view models
1 parent cbcebad commit 84b0393

11 files changed

+34
-53
lines changed

Flow.Launcher/App.xaml.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using Flow.Launcher.Infrastructure.Storage;
2020
using Flow.Launcher.Infrastructure.UserSettings;
2121
using Flow.Launcher.Plugin;
22+
using Flow.Launcher.SettingPages.ViewModels;
2223
using Flow.Launcher.ViewModel;
2324
using Microsoft.Extensions.DependencyInjection;
2425
using Microsoft.Extensions.Hosting;
@@ -74,14 +75,23 @@ public App()
7475
.AddSingleton(_ => _settings)
7576
.AddSingleton(sp => new Updater(sp.GetRequiredService<IPublicAPI>(), Launcher.Properties.Settings.Default.GithubRepo))
7677
.AddSingleton<Portable>()
77-
.AddSingleton<SettingWindowViewModel>()
7878
.AddSingleton<IAlphabet, PinyinAlphabet>()
7979
.AddSingleton<StringMatcher>()
8080
.AddSingleton<Internationalization>()
8181
.AddSingleton<IPublicAPI, PublicAPIInstance>()
8282
.AddSingleton<MainViewModel>()
8383
.AddSingleton<Theme>()
84+
// Welcome view model & setting window view model is very simple so we just use one instance
85+
.AddSingleton<SettingWindowViewModel>()
8486
.AddSingleton<WelcomeViewModel>()
87+
// Setting page view models are complex so we use transient instance
88+
.AddTransient<SettingsPaneAboutViewModel>()
89+
.AddTransient<SettingsPaneGeneralViewModel>()
90+
.AddTransient<SettingsPaneHotkeyViewModel>()
91+
.AddTransient<SettingsPanePluginsViewModel>()
92+
.AddTransient<SettingsPanePluginStoreViewModel>()
93+
.AddTransient<SettingsPaneProxyViewModel>()
94+
.AddTransient<SettingsPaneThemeViewModel>()
8595
).Build();
8696
Ioc.Default.ConfigureServices(host.Services);
8797
}

Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
1919
public Settings Settings { get; }
2020

2121
private readonly Updater _updater;
22-
private readonly IPortable _portable;
22+
private readonly Portable _portable;
2323
private readonly Internationalization _translater;
2424

25-
public SettingsPaneGeneralViewModel(Settings settings, Updater updater, IPortable portable, Internationalization translater)
25+
public SettingsPaneGeneralViewModel(Settings settings, Updater updater, Portable portable, Internationalization translater)
2626
{
2727
Settings = settings;
2828
_updater = updater;

Flow.Launcher/SettingPages/Views/SettingsPaneAbout.xaml.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System.Windows.Navigation;
2-
using Flow.Launcher.Core;
3-
using Flow.Launcher.SettingPages.ViewModels;
4-
using Flow.Launcher.Infrastructure.UserSettings;
52
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using Flow.Launcher.SettingPages.ViewModels;
64

75
namespace Flow.Launcher.SettingPages.Views;
86

@@ -14,9 +12,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1412
{
1513
if (!IsInitialized)
1614
{
17-
var settings = Ioc.Default.GetRequiredService<Settings>();
18-
var updater = Ioc.Default.GetRequiredService<Updater>();
19-
_viewModel = new SettingsPaneAboutViewModel(settings, updater);
15+
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneAboutViewModel>();
2016
DataContext = _viewModel;
2117
InitializeComponent();
2218
}

Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
using System.Windows.Navigation;
22
using CommunityToolkit.Mvvm.DependencyInjection;
3-
using Flow.Launcher.Core;
4-
using Flow.Launcher.Core.Configuration;
5-
using Flow.Launcher.Core.Resource;
6-
using Flow.Launcher.Infrastructure.UserSettings;
73
using Flow.Launcher.SettingPages.ViewModels;
84

95
namespace Flow.Launcher.SettingPages.Views;
@@ -16,11 +12,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1612
{
1713
if (!IsInitialized)
1814
{
19-
var settings = Ioc.Default.GetRequiredService<Settings>();
20-
var updater = Ioc.Default.GetRequiredService<Updater>();
21-
var portable = Ioc.Default.GetRequiredService<Portable>();
22-
var translater = Ioc.Default.GetRequiredService<Internationalization>();
23-
_viewModel = new SettingsPaneGeneralViewModel(settings, updater, portable, translater);
15+
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneGeneralViewModel>();
2416
DataContext = _viewModel;
2517
InitializeComponent();
2618
}

Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Windows.Navigation;
22
using CommunityToolkit.Mvvm.DependencyInjection;
33
using Flow.Launcher.SettingPages.ViewModels;
4-
using Flow.Launcher.Infrastructure.UserSettings;
54

65
namespace Flow.Launcher.SettingPages.Views;
76

@@ -13,8 +12,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1312
{
1413
if (!IsInitialized)
1514
{
16-
var settings = Ioc.Default.GetRequiredService<Settings>();
17-
_viewModel = new SettingsPaneHotkeyViewModel(settings);
15+
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneHotkeyViewModel>();
1816
DataContext = _viewModel;
1917
InitializeComponent();
2018
}

Flow.Launcher/SettingPages/Views/SettingsPanePluginStore.xaml.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using CommunityToolkit.Mvvm.DependencyInjection;
66
using Flow.Launcher.SettingPages.ViewModels;
77
using Flow.Launcher.ViewModel;
8-
using Flow.Launcher.Infrastructure.UserSettings;
98

109
namespace Flow.Launcher.SettingPages.Views;
1110

@@ -17,8 +16,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1716
{
1817
if (!IsInitialized)
1918
{
20-
var settings = Ioc.Default.GetRequiredService<Settings>();
21-
_viewModel = new SettingsPanePluginStoreViewModel();
19+
_viewModel = Ioc.Default.GetRequiredService<SettingsPanePluginStoreViewModel>();
2220
DataContext = _viewModel;
2321
InitializeComponent();
2422
}

Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Windows.Navigation;
33
using CommunityToolkit.Mvvm.DependencyInjection;
44
using Flow.Launcher.SettingPages.ViewModels;
5-
using Flow.Launcher.Infrastructure.UserSettings;
65

76
namespace Flow.Launcher.SettingPages.Views;
87

@@ -14,8 +13,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1413
{
1514
if (!IsInitialized)
1615
{
17-
var settings = Ioc.Default.GetRequiredService<Settings>();
18-
_viewModel = new SettingsPanePluginsViewModel(settings);
16+
_viewModel = Ioc.Default.GetRequiredService<SettingsPanePluginsViewModel>();
1917
DataContext = _viewModel;
2018
InitializeComponent();
2119
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using System.Windows.Navigation;
22
using CommunityToolkit.Mvvm.DependencyInjection;
3-
using Flow.Launcher.Core;
43
using Flow.Launcher.SettingPages.ViewModels;
5-
using Flow.Launcher.Infrastructure.UserSettings;
64

75
namespace Flow.Launcher.SettingPages.Views;
86

@@ -14,13 +12,10 @@ protected override void OnNavigatedTo(NavigationEventArgs e)
1412
{
1513
if (!IsInitialized)
1614
{
17-
var settings = Ioc.Default.GetRequiredService<Settings>();
18-
var updater = Ioc.Default.GetRequiredService<Updater>();
19-
_viewModel = new SettingsPaneProxyViewModel(settings, updater);
15+
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneProxyViewModel>();
2016
DataContext = _viewModel;
2117
InitializeComponent();
2218
}
23-
2419
base.OnNavigatedTo(e);
2520
}
2621
}
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
11
using System.Windows.Navigation;
22
using CommunityToolkit.Mvvm.DependencyInjection;
3-
using Flow.Launcher.Core.Resource;
4-
using Flow.Launcher.Infrastructure.UserSettings;
53
using Flow.Launcher.SettingPages.ViewModels;
6-
using Page = ModernWpf.Controls.Page;
74

85
namespace Flow.Launcher.SettingPages.Views;
96

10-
public partial class SettingsPaneTheme : Page
7+
public partial class SettingsPaneTheme
118
{
129
private SettingsPaneThemeViewModel _viewModel = null!;
1310

1411
protected override void OnNavigatedTo(NavigationEventArgs e)
1512
{
1613
if (!IsInitialized)
1714
{
18-
var settings = Ioc.Default.GetRequiredService<Settings>();
19-
var theme = Ioc.Default.GetRequiredService<Theme>();
20-
_viewModel = new SettingsPaneThemeViewModel(settings, theme);
15+
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneThemeViewModel>();
2116
DataContext = _viewModel;
2217
InitializeComponent();
2318
}
24-
2519
base.OnNavigatedTo(e);
2620
}
2721
}

Flow.Launcher/ViewModel/SettingWindowViewModel.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,42 @@ namespace Flow.Launcher.ViewModel;
55

66
public partial class SettingWindowViewModel : BaseModel
77
{
8-
public Settings Settings { get; }
8+
private readonly Settings _settings;
99

1010
public SettingWindowViewModel(Settings settings)
1111
{
12-
Settings = settings;
12+
_settings = settings;
1313
}
1414

1515
/// <summary>
1616
/// Save Flow settings. Plugins settings are not included.
1717
/// </summary>
1818
public void Save()
1919
{
20-
Settings.Save();
20+
_settings.Save();
2121
}
2222

2323
public double SettingWindowWidth
2424
{
25-
get => Settings.SettingWindowWidth;
26-
set => Settings.SettingWindowWidth = value;
25+
get => _settings.SettingWindowWidth;
26+
set => _settings.SettingWindowWidth = value;
2727
}
2828

2929
public double SettingWindowHeight
3030
{
31-
get => Settings.SettingWindowHeight;
32-
set => Settings.SettingWindowHeight = value;
31+
get => _settings.SettingWindowHeight;
32+
set => _settings.SettingWindowHeight = value;
3333
}
3434

3535
public double? SettingWindowTop
3636
{
37-
get => Settings.SettingWindowTop;
38-
set => Settings.SettingWindowTop = value;
37+
get => _settings.SettingWindowTop;
38+
set => _settings.SettingWindowTop = value;
3939
}
4040

4141
public double? SettingWindowLeft
4242
{
43-
get => Settings.SettingWindowLeft;
44-
set => Settings.SettingWindowLeft = value;
43+
get => _settings.SettingWindowLeft;
44+
set => _settings.SettingWindowLeft = value;
4545
}
4646
}

0 commit comments

Comments
 (0)