container = $container; } public static function create(): self { $container = new Container(); $container->factory( SettingsRepository::class, static function (): SettingsRepository { return new SettingsRepository(); } ); $container->factory( LoggerInterface::class, static function (): LoggerInterface { return new OptionLogger(); } ); $container->factory( UrlTransformer::class, static function (): UrlTransformer { return new UrlTransformer(); } ); $container->factory( MetadataUrlTransformer::class, static function () use ( $container ): MetadataUrlTransformer { return new MetadataUrlTransformer( $container->get( UrlTransformer::class ) ); } ); $container->factory( PackageValidator::class, static function (): PackageValidator { return new PackageValidator(); } ); $container->factory( FileTransportInterface::class, static function () use ( $container ): FileTransportInterface { return new JsonFileTransport( $container->get( PackageValidator::class ) ); } ); $container->factory( FileImportController::class, static function () use ( $container ): FileImportController { return new FileImportController( $container->get( FileTransportInterface::class ), $container->get( LoggerInterface::class ) ); } ); $container->factory( RestTransportClient::class, static function (): RestTransportClient { return new RestTransportClient(); } ); $container->factory( RestPackageController::class, static function () use ( $container ): RestPackageController { return new RestPackageController( $container->get( PackageValidator::class ) ); } ); $container->factory( AdminPage::class, static function () use ( $container ): AdminPage { return new AdminPage( $container->get( SettingsRepository::class ), $container->get( LoggerInterface::class ) ); } ); return new self( $container ); } public function register(): void { /** @var AdminPage $admin_page */ $admin_page = $this->container->get( AdminPage::class ); /** @var FileImportController $file_import_controller */ $file_import_controller = $this->container->get( FileImportController::class ); /** @var RestPackageController $rest_package_controller */ $rest_package_controller = $this->container->get( RestPackageController::class ); $admin_page->register(); $file_import_controller->register(); $rest_package_controller->register(); } }