Core

Controller Resolver Lifecycle

How controller creation uses container + request-scoped binding + context initialization.

Dispatch flow

Resolver binds current request, resolves controller via container, calls setControllerContext(), resolves action parameters and invokes action.

$this->container->set(ServerRequestInterface::class, $request);
$controller = $this->container->get($controllerClass);
$controller->setControllerContext($request, $responseFactory, $streamFactory);

DI guideline

Constructor injection is for business services. Action params are route params and optional ServerRequestInterface.