32public partial class App : Application
43 => _host.
Services.GetService(typeof(T)) as T;
52 private async
void OnStartup(
object sender, StartupEventArgs e)
54 var appLocation = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
57 _host = Host.CreateDefaultBuilder(e.Args)
58 .ConfigureAppConfiguration(c =>
60 c.SetBasePath(appLocation);
62 .ConfigureServices(ConfigureServices)
65 await _host.StartAsync();
68 private void ConfigureServices(HostBuilderContext context, IServiceCollection services)
73 services.AddHostedService<ApplicationHostService>();
78 services.AddSingleton<IFileService, FileService>();
79 services.AddSingleton<IDocumentService, DocumentService>();
80 services.AddSingleton<IPersonService, PersonService>();
81 services.AddSingleton<ICompetitionService, CompetitionService>();
82 services.AddSingleton<ICompetitionDistanceRuleService, CompetitionDistanceRuleService>();
83 services.AddSingleton<IWorkspaceService, WorkspaceService>();
84 services.AddSingleton<IScoreService, ScoreService>();
85 services.AddSingleton<IRaceService, RaceService>();
86 services.AddSingleton<IDocumentPlaceholderResolver<PersonStart>, DocumentPlaceholderResolverPersonStart>();
87 services.AddSingleton<IDocumentPlaceholderResolver<Person>, DocumentPlaceholderResolverPerson>();
88 services.AddSingleton<IDocumentPlaceholderResolver<Race>, DocumentPlaceholderResolverRace>();
89 services.AddSingleton<IDocumentPlaceholderResolver<IAnalyticsModule>, DocumentPlaceholderResolverIAnalyticsModule>();
90 services.AddSingleton<IDocumentStrategy, DocumentStrategyCertificates>();
91 services.AddSingleton<IDocumentStrategy, DocumentStrategyOverviewList>();
92 services.AddSingleton<IDocumentStrategy, DocumentStrategyRaceStartList>();
93 services.AddSingleton<IDocumentStrategy, DocumentStrategyTimeForms>();
94 services.AddSingleton<IDocumentStrategy, DocumentStrategyResultList>();
95 services.AddSingleton<IDocumentStrategy, DocumentStrategyResultListDetail>();
96 services.AddSingleton<IDocumentStrategy, DocumentStrategyAnalytics>();
97 services.AddSingleton<AnalyticsModuleGenderPersons>();
98 services.AddSingleton<AnalyticsModuleGenderStarts>();
99 services.AddSingleton<AnalyticsModuleStartsPerStyle>();
100 services.AddSingleton<AnalyticsModulePersonCounters>();
101 services.AddSingleton<AnalyticsModuleStartsCounters>();
102 services.AddSingleton<AnalyticsModuleAgeDistribution>();
103 services.AddSingleton<AnalyticsModuleStartsPerPerson>();
104 services.AddSingleton<AnalyticsModuleDistancesBetweenStarts>();
105 services.AddSingleton<AnalyticsModuleStartDistances>();
106 services.AddSingleton<AnalyticsModulePlacesAgeDistribution>();
107 services.AddSingleton<AnalyticsModuleRacesAges>();
108 services.AddSingleton<AnalyticsModuleCompetitionTimes>();
109 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleGenderPersons>());
110 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleGenderStarts>());
111 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleStartsPerStyle>());
112 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModulePersonCounters>());
113 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleStartsCounters>());
114 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleAgeDistribution>());
115 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleStartsPerPerson>());
116 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleDistancesBetweenStarts>());
117 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleStartDistances>());
118 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModulePlacesAgeDistribution>());
119 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleRacesAges>());
120 services.AddSingleton<IAnalyticsModule>(sp => sp.GetRequiredService<AnalyticsModuleCompetitionTimes>());
121 services.AddSingleton<IDocumentFileConverterSelector, DocumentFileConverterSelector>();
122 services.AddSingleton<IDocumentFileConverter, MsWordDocumentFileConverter>();
123 services.AddSingleton<IDocumentFileConverter, LibreOfficeDocumentFileConverter>();
126 services.AddSingleton<IApplicationInfoService, ApplicationInfoService>();
127 services.AddSingleton<IPersistAndRestoreService, PersistAndRestoreService>();
128 services.AddSingleton<IThemeSelectorService, ThemeSelectorService>();
129 services.AddSingleton<IPageService, PageService>();
130 services.AddSingleton<INavigationService, NavigationService>();
131 services.AddSingleton<IDialogCoordinator>(DialogCoordinator.Instance);
134 services.AddSingleton<IShellWindow, ShellWindow>();
135 services.AddSingleton<ShellViewModel>();
137 services.AddSingleton<MainViewModel>();
138 services.AddSingleton<MainPage>();
140 services.AddSingleton<WorkspaceViewModel>();
141 services.AddSingleton<WorkspacePage>();
143 services.AddSingleton<CompetitionViewModel>();
144 services.AddSingleton<CompetitionPage>();
146 services.AddSingleton<PeopleViewModel>();
147 services.AddSingleton<PeoplePage>();
149 services.AddSingleton<PrepareRacesViewModel>();
150 services.AddSingleton<PrepareRacesPage>();
152 services.AddSingleton<CreateDocumentsViewModel>();
153 services.AddSingleton<CreateDocumentsPage>();
155 services.AddSingleton<TimeInputViewModel>();
156 services.AddSingleton<TimeInputPage>();
158 services.AddSingleton<ResultsViewModel>();
159 services.AddSingleton<ResultsPage>();
161 services.AddSingleton<AnalyticsViewModel>();
162 services.AddSingleton<AnalyticsPage>();
164 services.AddSingleton<SettingsViewModel>();
165 services.AddSingleton<SettingsPage>();
167 services.AddSingleton<IWorkspaceManagerViewModel, WorkspaceManagerViewModel>();
170 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetPersonCounters>();
171 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetGenderPersons>();
172 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetStartsCounters>();
173 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetGenderStarts>();
174 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetStartsPerStyle>();
175 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetStartDistances>();
176 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetAgeDistribution>();
177 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetStartsPerPerson>();
178 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetDistancesBetweenStarts>();
179 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetPlacesAgeDistribution>();
180 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetRacesAges>();
181 services.AddSingleton<IAnalyticsWidget, AnalyticsWidgetCompetitionTimes>();
184 services.Configure<AppConfig>(context.Configuration.GetSection(nameof(AppConfig)));
187 private async
void OnExit(
object sender, ExitEventArgs e)
189 await _host.StopAsync();
194 private void OnDispatcherUnhandledException(
object sender, DispatcherUnhandledExceptionEventArgs e)