Fehlerbehandlung, Logging und feldbezogene Validierung (Kapitel 13.2)
Zentrale Exception-Behandlung (Dispatcher.UIThread.UnhandledException, AppDomain, TaskScheduler) verhindert Abstürze und protokolliert Fehler über AppLogger in eine rotierende Log-Datei im App-Datenverzeichnis. Toast-Benachrichtigungen zeigen Erfolg/Fehler global an. Alle Dialoge mit Formularfeldern zeigen Validierungsmeldungen jetzt direkt am betroffenen Feld statt in einem Sammel-Label. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,7 @@ using LehrerApp.Core.Interfaces;
|
||||
using LehrerApp.Core.Services;
|
||||
using LehrerApp.Data;
|
||||
using LehrerApp.Data.Repositories;
|
||||
using LehrerApp.Desktop.Services;
|
||||
using LehrerApp.Desktop.ViewModels;
|
||||
using LehrerApp.Desktop.ViewModels.Groups;
|
||||
using LehrerApp.Desktop.ViewModels.Settings;
|
||||
@@ -24,20 +25,44 @@ public static class AppBootstrapper
|
||||
public static string DbPath { get; private set; } = "";
|
||||
public static string AppDataPath { get; private set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Vor der eigentlichen DI-Konfiguration verfügbar (z.B. für den globalen
|
||||
/// Exception-Handler in Program.cs, der schon vor <see cref="BuildServices"/> greifen muss).
|
||||
/// </summary>
|
||||
public static AppLogger Logger { get; private set; } = null!;
|
||||
|
||||
public static string ResolveAppDataPath()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(AppDataPath)) return AppDataPath;
|
||||
var appData = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
||||
"LehrerApp");
|
||||
Directory.CreateDirectory(appData);
|
||||
AppDataPath = appData;
|
||||
return appData;
|
||||
}
|
||||
|
||||
public static AppLogger EnsureLogger()
|
||||
{
|
||||
Logger ??= new AppLogger(ResolveAppDataPath());
|
||||
return Logger;
|
||||
}
|
||||
|
||||
public static IServiceProvider BuildServices()
|
||||
{
|
||||
var services = new ServiceCollection();
|
||||
|
||||
// ── Pfade ─────────────────────────────────────────────────────────────
|
||||
var appData = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
||||
"LehrerApp");
|
||||
Directory.CreateDirectory(appData);
|
||||
AppDataPath = appData;
|
||||
var appData = ResolveAppDataPath();
|
||||
DbPath = Path.Combine(appData, "lehrerapp.db");
|
||||
var queuePath = Path.Combine(appData, "syncqueue.db");
|
||||
var keyPath = Path.Combine(appData, "sync.key");
|
||||
|
||||
// ── Logging & Benachrichtigungen ─────────────────────────────────────────
|
||||
EnsureLogger();
|
||||
services.AddSingleton(Logger);
|
||||
services.AddSingleton<NotificationService>();
|
||||
|
||||
// ── Datenbank ─────────────────────────────────────────────────────────
|
||||
services.AddSingleton(_ => new LiteDbContext(DbPath));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user