using HanaToolbox.Config; using HanaToolbox.Logging; using HanaToolbox.Scheduling; using HanaToolbox.Services.Interfaces; namespace HanaToolbox.Services; /// /// Simple factory for wiring service dependencies without a DI container. /// AOT-safe — no reflection, no generic activators. /// public static class ServiceFactory { public static ProcessRunner CreateRunner(AppLogger log) => new(log); public static SuUserSwitcher CreateSwitcher(AppLogger log) => new(CreateRunner(log)); public static HdbClientLocator CreateLocator(AppLogger log) => new(CreateRunner(log)); public static NtfyNotificationService CreateNtfy(AppLogger log, NtfyConfig ntfy) => new(ntfy, log); public static FileMonitorStateService CreateState(AppLogger log) => new(log); public static BackupService CreateBackupService(AppLogger log) { var config = ConfigService.Load(); var runner = CreateRunner(log); var switcher = new SuUserSwitcher(runner); var locator = new HdbClientLocator(runner); var ntfy = CreateNtfy(log, config.Ntfy); return new BackupService(switcher, locator, ntfy, log); } public static AuroraService CreateAuroraService(AppLogger log) { var config = ConfigService.Load(); var runner = CreateRunner(log); var switcher = new SuUserSwitcher(runner); var locator = new HdbClientLocator(runner); var ntfy = CreateNtfy(log, config.Ntfy); return new AuroraService(switcher, locator, ntfy, log); } public static MonitorService CreateMonitorService(AppLogger log) { var config = ConfigService.Load(); var runner = CreateRunner(log); var switcher = new SuUserSwitcher(runner); var locator = new HdbClientLocator(runner); var ntfy = CreateNtfy(log, config.Ntfy); var state = CreateState(log); return new MonitorService(runner, switcher, locator, ntfy, state, log); } public static CronOrchestrator CreateCronOrchestrator(AppLogger log) { var config = ConfigService.Load(); var runner = CreateRunner(log); var switcher = new SuUserSwitcher(runner); var locator = new HdbClientLocator(runner); var ntfy = CreateNtfy(log, config.Ntfy); var state = CreateState(log); return new CronOrchestrator( monitor: new MonitorService(runner, switcher, locator, ntfy, state, log), backup: new BackupService(switcher, locator, ntfy, log), cleaner: new CleanerService(log), aurora: new AuroraService(switcher, locator, ntfy, log), firewall: new FirewallService(runner, log), stateService: state, logger: log); } }