From 1c97b425f40d504bb72f1a5f3263a0d0336136be Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Thu, 28 Mar 2024 14:00:29 +0800 Subject: [PATCH] refine --- BetterGenshinImpact/App.xaml.cs | 28 +++++++------------ .../DependencyInjectionExtensions.cs | 27 ++++++++++++++++++ BetterGenshinImpact/ViewModel/IViewModel.cs | 3 ++ .../ViewModel/MainWindowViewModel.cs | 2 +- .../ViewModel/NotifyIconViewModel.cs | 2 +- .../Pages/CommonSettingsPageViewModel.cs | 2 +- .../ViewModel/Pages/HomePageViewModel.cs | 2 +- .../ViewModel/Pages/HotKeyPageViewModel.cs | 2 +- .../Pages/MacroSettingsPageViewModel.cs | 2 +- .../ViewModel/Pages/ScriptControlViewModel.cs | 2 +- .../Pages/TaskSettingsPageViewModel.cs | 2 +- .../Pages/TriggerSettingsPageViewModel.cs | 2 +- 12 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 BetterGenshinImpact/Helpers/Extensions/DependencyInjectionExtensions.cs create mode 100644 BetterGenshinImpact/ViewModel/IViewModel.cs diff --git a/BetterGenshinImpact/App.xaml.cs b/BetterGenshinImpact/App.xaml.cs index d428fd6d..af2bb63a 100644 --- a/BetterGenshinImpact/App.xaml.cs +++ b/BetterGenshinImpact/App.xaml.cs @@ -1,5 +1,6 @@ using BetterGenshinImpact.GameTask; using BetterGenshinImpact.Helpers; +using BetterGenshinImpact.Helpers.Extensions; using BetterGenshinImpact.Service; using BetterGenshinImpact.Service.Interface; using BetterGenshinImpact.View; @@ -67,26 +68,17 @@ public partial class App : Application services.AddSingleton(); // Main window with navigation - services.AddSingleton(); - services.AddSingleton(); + services.AddView(); services.AddSingleton(); - // Views and ViewModels - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - - services.AddSingleton(); - services.AddSingleton(); + // Views + services.AddView(); + services.AddView(); + services.AddView(); + services.AddView(); + services.AddView(); + services.AddView(); + services.AddView(); // My Services services.AddSingleton(); diff --git a/BetterGenshinImpact/Helpers/Extensions/DependencyInjectionExtensions.cs b/BetterGenshinImpact/Helpers/Extensions/DependencyInjectionExtensions.cs new file mode 100644 index 00000000..09c1834a --- /dev/null +++ b/BetterGenshinImpact/Helpers/Extensions/DependencyInjectionExtensions.cs @@ -0,0 +1,27 @@ +using BetterGenshinImpact.ViewModel; +using Microsoft.Extensions.DependencyInjection; +using System.Windows.Controls; + +namespace BetterGenshinImpact.Helpers.Extensions; + +internal static class DependencyInjectionExtensions +{ + public static IServiceCollection AddView(this IServiceCollection services) + where TWindow : class + where TWindowImplementation : class, TWindow + where TViewModel : class, IViewModel + { + return services + .AddSingleton() + .AddSingleton(); + } + + public static IServiceCollection AddView(this IServiceCollection services) + where TPage : Page + where TViewModel : class, IViewModel + { + return services + .AddSingleton() + .AddSingleton(); + } +} \ No newline at end of file diff --git a/BetterGenshinImpact/ViewModel/IViewModel.cs b/BetterGenshinImpact/ViewModel/IViewModel.cs new file mode 100644 index 00000000..8ca97b4a --- /dev/null +++ b/BetterGenshinImpact/ViewModel/IViewModel.cs @@ -0,0 +1,3 @@ +namespace BetterGenshinImpact.ViewModel; + +internal interface IViewModel; \ No newline at end of file diff --git a/BetterGenshinImpact/ViewModel/MainWindowViewModel.cs b/BetterGenshinImpact/ViewModel/MainWindowViewModel.cs index 79b81173..e6cde306 100644 --- a/BetterGenshinImpact/ViewModel/MainWindowViewModel.cs +++ b/BetterGenshinImpact/ViewModel/MainWindowViewModel.cs @@ -19,7 +19,7 @@ using Wpf.Ui; namespace BetterGenshinImpact.ViewModel; -public partial class MainWindowViewModel : ObservableObject +public partial class MainWindowViewModel : ObservableObject, IViewModel { private readonly ILogger _logger; private readonly IConfigService _configService; diff --git a/BetterGenshinImpact/ViewModel/NotifyIconViewModel.cs b/BetterGenshinImpact/ViewModel/NotifyIconViewModel.cs index 957fe9c7..10ecf9f3 100644 --- a/BetterGenshinImpact/ViewModel/NotifyIconViewModel.cs +++ b/BetterGenshinImpact/ViewModel/NotifyIconViewModel.cs @@ -60,4 +60,4 @@ file static class WindowBacktray } } } -} +} \ No newline at end of file diff --git a/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs index 04bde612..98bdf70b 100644 --- a/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/CommonSettingsPageViewModel.cs @@ -16,7 +16,7 @@ using BetterGenshinImpact.View.Windows; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class CommonSettingsPageViewModel : ObservableObject, INavigationAware +public partial class CommonSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } diff --git a/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs index 5a0ffafa..a535d559 100644 --- a/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/HomePageViewModel.cs @@ -20,7 +20,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class HomePageViewModel : ObservableObject, INavigationAware +public partial class HomePageViewModel : ObservableObject, INavigationAware, IViewModel { [ObservableProperty] private string[] _modeNames = GameCaptureFactory.ModeNames(); diff --git a/BetterGenshinImpact/ViewModel/Pages/HotKeyPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/HotKeyPageViewModel.cs index b4849769..774ee1a5 100644 --- a/BetterGenshinImpact/ViewModel/Pages/HotKeyPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/HotKeyPageViewModel.cs @@ -17,7 +17,7 @@ using BetterGenshinImpact.Model; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class HotKeyPageViewModel : ObservableObject +public partial class HotKeyPageViewModel : ObservableObject, IViewModel { private readonly ILogger _logger; private readonly TaskSettingsPageViewModel _taskSettingsPageViewModel; diff --git a/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs index 250ce486..d056d012 100644 --- a/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/MacroSettingsPageViewModel.cs @@ -9,7 +9,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class MacroSettingsPageViewModel : ObservableObject, INavigationAware +public partial class MacroSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } diff --git a/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs index af16fe00..cb1b4d63 100644 --- a/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/ScriptControlViewModel.cs @@ -9,7 +9,7 @@ using System.Diagnostics; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class ScriptControlViewModel : ObservableObject, INavigationAware +public partial class ScriptControlViewModel : ObservableObject, INavigationAware, IViewModel { public ScriptControlViewModel() { diff --git a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs index 849f9280..04060fab 100644 --- a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs @@ -18,7 +18,7 @@ using MessageBox = System.Windows.MessageBox; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class TaskSettingsPageViewModel : ObservableObject, INavigationAware +public partial class TaskSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; } diff --git a/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs index f97a8510..8e2b1b84 100644 --- a/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/TriggerSettingsPageViewModel.cs @@ -11,7 +11,7 @@ using Wpf.Ui.Controls; namespace BetterGenshinImpact.ViewModel.Pages; -public partial class TriggerSettingsPageViewModel : ObservableObject, INavigationAware +public partial class TriggerSettingsPageViewModel : ObservableObject, INavigationAware, IViewModel { public AllConfig Config { get; set; }