set(CallableResolverInterface::class, new CallableResolver($callableResolver)); $app = AppFactory::createFromContainer($container); $container->set(App::class, $app); $controllerInvoker = static::createControllerInvoker($container); $app->getRouteCollector()->setDefaultInvocationStrategy($controllerInvoker); return $app; } private static function createControllerInvoker(ContainerInterface $container): ControllerInvoker { $resolvers = [ // Inject parameters by name first new AssociativeArrayResolver(), // Then inject services by type-hints for those that weren't resolved new TypeHintContainerResolver($container), // Then fall back on parameters default values for optional route parameters new DefaultValueResolver(), ]; $invoker = new Invoker(new ResolverChain($resolvers), $container); return new ControllerInvoker($invoker); } }