Vereinsmeisterschaften  22aa7800eae54b428d40e835886cefe1fdefdfdf
This is a software that can be used to manage the internal competition of the swimming club Illertissen called "Vereinsmeisterschaften".
Loading...
Searching...
No Matches
PageService.cs
2
3using CommunityToolkit.Mvvm.ComponentModel;
4
8
10
15{
16 private readonly Dictionary<string, Type> _pages = new Dictionary<string, Type>();
17 private readonly IServiceProvider _serviceProvider;
18
23 public PageService(IServiceProvider serviceProvider)
24 {
25 _serviceProvider = serviceProvider;
26 Configure<MainViewModel, MainPage>();
27 Configure<WorkspaceViewModel, WorkspacePage>();
28 Configure<CompetitionViewModel, CompetitionPage>();
29 Configure<PeopleViewModel, PeoplePage>();
30 Configure<PrepareRacesViewModel, PrepareRacesPage>();
31 Configure<CreateDocumentsViewModel, CreateDocumentsPage>();
32 Configure<TimeInputViewModel, TimeInputPage>();
33 Configure<ResultsViewModel, ResultsPage>();
34 Configure<AnalyticsViewModel, AnalyticsPage>();
35 Configure<SettingsViewModel, SettingsPage>();
36 }
37
39 public Type GetPageType(string key)
40 {
41 Type pageType;
42 lock (_pages)
43 {
44 if (!_pages.TryGetValue(key, out pageType))
45 {
46 throw new ArgumentException($"Page not found: {key}. Did you forget to call PageService.Configure?");
47 }
48 }
49
50 return pageType;
51 }
52
54 public Page GetPage(string key)
55 {
56 var pageType = GetPageType(key);
57 return _serviceProvider.GetService(pageType) as Page;
58 }
59
60 private void Configure<VM, V>()
61 where VM : ObservableObject
62 where V : Page
63 {
64 lock (_pages)
65 {
66 var key = typeof(VM).FullName;
67 if (_pages.ContainsKey(key))
68 {
69 throw new ArgumentException($"The key {key} is already configured in PageService");
70 }
71
72 var type = typeof(V);
73 if (_pages.Any(p => p.Value == type))
74 {
75 throw new ArgumentException($"This type is already configured with key {_pages.First(p => p.Value == type).Key}");
76 }
77
78 _pages.Add(key, type);
79 }
80 }
81}
PageService(IServiceProvider serviceProvider)
Constructor for the PageService.
Page GetPage(string key)
Get the page instance for a given key.Page object
Type GetPageType(string key)
Get the page type for a given key.Type for the page
Interface for a service to manage pages in the application.