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 _pages = new(); public PageService() { Configure(); Configure(); Configure(); } 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() 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); } } }