WIn_RustTools/RustTools/Services/PageService.cs

66 lines
1.8 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.UI.Xaml.Controls;
using RustTools.Contracts.Services;
using RustTools.ViewModels;
using RustTools.Views;
namespace RustTools.Services;
public class PageService : IPageService
{
private readonly Dictionary<string, Type> _pages = new();
public PageService()
{
//Configure<MainViewModel, MainPage>();
Configure<HomePageViewModel, HomePage>();
Configure<ConcernViewModel, ConcernPage>();
Configure<RankingViewModel, RankingPage>();
Configure<UserViewModel, UserPage>();
Configure<ModuleViewModel, ModulePage>();
Configure<CodeTableViewModel, CodeTablePage>();
Configure<CodeDataViewModel, CodeDataPage>();
Configure<SettingsViewModel, SettingsPage>();
}
public Type GetPageType(string key)
{
Type? pageType;
lock (_pages)
{
if (!_pages.TryGetValue(key, out pageType))
{
throw new ArgumentException($"Page not found: {key}. Did you forget to call PageService.Configure?");
}
}
return pageType;
}
private void Configure<VM, V>()
where VM : ObservableObject
where V : Page
{
lock (_pages)
{
var key = typeof(VM).FullName!;
if (_pages.ContainsKey(key))
{
throw new ArgumentException($"The key {key} is already configured in PageService");
}
var type = typeof(V);
if (_pages.ContainsValue(type))
{
throw new ArgumentException($"This type is already configured with key {_pages.First(p => p.Value == type).Key}");
}
_pages.Add(key, type);
}
}
}