registerFunction($moduleName, 'service', static function () use ($moduleBasePath): \Modules\FxRates\Domain\FxRatesService { static $service = null; if ($service instanceof \Modules\FxRates\Domain\FxRatesService) { return $service; } $moduleConfig = \Modules\FxRates\Infrastructure\ModuleConfig::load($moduleBasePath); $settingsStore = new \Modules\FxRates\Infrastructure\SettingsStore($moduleConfig); $settings = $settingsStore->load(); $pdo = \Modules\FxRates\Infrastructure\ConnectionFactory::make($settingsStore); $repository = new \Modules\FxRates\Infrastructure\FxRatesRepository( $pdo, $moduleConfig->tablePrefix() ); $repository->ensureSchema(); $service = new \Modules\FxRates\Domain\FxRatesService($repository, $settings); return $service; }); }