Monitor::class, 'startup' => Startup::class, ]; public function create(): Application { // Lazy load command with container $container = $this->getContainer(); /** @var \Pfatt\PfattApplication $application */ $application = $container->get(PfattApplication::class); return $application; } public function getContainer(): ContainerInterface { $file = __DIR__ . '/../cache/container.php'; if (!file_exists($file)) { $containerBuilder = new ContainerBuilder(); $containerBuilder->register(Logger::class, Logger::class) ->setPublic(true); $containerBuilder->setAlias(LoggerInterface::class, Logger::class); $containerBuilder->register('logger-5268', Logger::class) ->setPublic(true) ->setArgument('$channel', 'pfatt-5268AC'); $containerBuilder->register(Config::class, Config::class) ->setPublic(true) ->setArguments(['', '', '']); $containerBuilder->autowire(NgController::class, NgController::class) ->setPublic(true); $containerBuilder->autowire(Monitor::class, Monitor::class) ->setPublic(true) ->setArgument(Logger::class, new Reference('logger-5268')); $containerBuilder->autowire(Startup::class, Startup::class) ->setPublic(true); $containerBuilder->register(ContainerCommandLoader::class, ContainerCommandLoader::class) ->setArguments([ new Reference('service_container'), $this->commands ]) ->setPublic(true); $containerBuilder->register(PfattApplication::class, PfattApplication::class) ->setArguments(['PfATT']) ->addMethodCall('setCommandLoader', [new Reference(ContainerCommandLoader::class)]) ->setPublic(true); $containerBuilder->compile(); $dumper = new PhpDumper($containerBuilder); /** * This will always be a string because of the default options. * @psalm-suppress MixedArgumentTypeCoercion */ file_put_contents($file, $dumper->dump()); } require_once $file; /** * Tell static analysis of this dynamic class. * @var \Symfony\Component\DependencyInjection\ContainerInterface $container * @psalm-suppress UndefinedClass * @phpstan-ignore-next-line */ $container = new \ProjectServiceContainer(); return $container; } }