diff --git a/core/core.services.yml b/core/core.services.yml
index 3196589..bc17b95 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -554,9 +554,15 @@ services:
     class: Drupal\Core\AppRootFactory
     arguments: ['@kernel']
     public: false
+  symfony.psr7.http_message_factory:
+    class: Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory
+    public: false
+  symfony.psr7.http_foundation_factory:
+    class: Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory
+    public: false
   controller_resolver:
     class: Drupal\Core\Controller\ControllerResolver
-    arguments: ['@class_resolver']
+    arguments: ['@symfony.psr7.http_message_factory', '@class_resolver']
   class_resolver:
     class: Drupal\Core\DependencyInjection\ClassResolver
     calls:
diff --git a/core/lib/Drupal/Core/Controller/ControllerResolver.php b/core/lib/Drupal/Core/Controller/ControllerResolver.php
index bf58aff..62f313c 100644
--- a/core/lib/Drupal/Core/Controller/ControllerResolver.php
+++ b/core/lib/Drupal/Core/Controller/ControllerResolver.php
@@ -12,6 +12,8 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Controller\ControllerResolver as BaseControllerResolver;
 use Drupal\Core\DependencyInjection\ClassResolverInterface;
+use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
+
 
 /**
  * ControllerResolver to enhance controllers beyond Symfony's basic handling.
@@ -38,12 +40,20 @@ class ControllerResolver extends BaseControllerResolver implements ControllerRes
   protected $classResolver;
 
   /**
+   * The psr7 converter.
+   *
+   * @var \Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
+   */
+  private $httpMessageFactory;
+
+  /**
    * Constructs a new ControllerResolver.
    *
    * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
    *   The class resolver.
    */
-  public function __construct(ClassResolverInterface $class_resolver) {
+  public function __construct(HttpMessageFactoryInterface $http_message_factory, ClassResolverInterface $class_resolver) {
+    $this->httpMessageFactory = $http_message_factory;
     $this->classResolver = $class_resolver;
   }
 
@@ -94,10 +104,10 @@ public function getController(Request $request) {
    *   A PHP callable.
    *
    * @throws \LogicException
-   *   If the controller cannot be parsed
+   *   If the controller cannot be parsed.
    *
    * @throws \InvalidArgumentException
-   *   If the controller class does not exist
+   *   If the controller class does not exist.
    */
   protected function createController($controller) {
     // Controller in the service:method notation.
@@ -135,6 +145,9 @@ protected function doGetArguments(Request $request, $controller, array $paramete
       elseif ($param->getClass() && $param->getClass()->isInstance($request)) {
         $arguments[] = $request;
       }
+      elseif ($param->getClass() && $param->getClass()->name === 'Psr\Http\Message\ServerRequestInterface') {
+        $arguments[] = $this->httpMessageFactory->createRequest($request);
+      }
       elseif ($param->getClass() && ($param->getClass()->name == 'Drupal\Core\Routing\RouteMatchInterface' || is_subclass_of($param->getClass()->name, 'Drupal\Core\Routing\RouteMatchInterface'))) {
         $arguments[] = RouteMatch::createFromRequest($request);
       }
