From 501e5059bdc274a3839c1b3fb2ed5217acf2748c Mon Sep 17 00:00:00 2001
From: Alexander Schnitzler <git@alexanderschnitzler.de>
Date: Wed, 9 Sep 2020 11:57:55 +0200
Subject: [PATCH] [TASK] Do not use object manager in RequestHandlerResolver

With this patch, the RequestHandlerResolver no longer uses
the object manager to create new instances of request handlers
but makeInstance instead.

Releases: master
Resolves: #92241
Change-Id: Ided4139ca7c92ab0cb1d642ffc8a9529aedcfe50
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/65650
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de>
Reviewed-by: Torben Hansen <derhansen@gmail.com>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
---
 .../Classes/Mvc/RequestHandlerResolver.php    | 25 +++++++++----------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/typo3/sysext/extbase/Classes/Mvc/RequestHandlerResolver.php b/typo3/sysext/extbase/Classes/Mvc/RequestHandlerResolver.php
index 895a1ce4dc86..48d89f9c0354 100644
--- a/typo3/sysext/extbase/Classes/Mvc/RequestHandlerResolver.php
+++ b/typo3/sysext/extbase/Classes/Mvc/RequestHandlerResolver.php
@@ -15,8 +15,9 @@
 
 namespace TYPO3\CMS\Extbase\Mvc;
 
+use Psr\Container\ContainerInterface;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Configuration\RequestHandlersConfigurationFactory;
-use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
 
 /**
  * Analyzes the raw request and delivers a request handler which can handle it.
@@ -25,9 +26,9 @@ use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
 class RequestHandlerResolver
 {
     /**
-     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
+     * @var ContainerInterface
      */
-    protected $objectManager;
+    private $container;
 
     /**
      * @var \TYPO3\CMS\Extbase\Configuration\RequestHandlersConfiguration
@@ -35,18 +36,13 @@ class RequestHandlerResolver
     private $requestHandlersConfiguration;
 
     /**
-     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
-     */
-    public function injectObjectManager(ObjectManagerInterface $objectManager)
-    {
-        $this->objectManager = $objectManager;
-    }
-
-    /**
+     * @param ContainerInterface $container
      * @param RequestHandlersConfigurationFactory $requestHandlersConfigurationFactory
+     * @throws \TYPO3\CMS\Extbase\Configuration\Exception
      */
-    public function __construct(RequestHandlersConfigurationFactory $requestHandlersConfigurationFactory)
+    public function __construct(ContainerInterface $container, RequestHandlersConfigurationFactory $requestHandlersConfigurationFactory)
     {
+        $this->container = $container;
         $this->requestHandlersConfiguration = $requestHandlersConfigurationFactory->createRequestHandlersConfiguration();
     }
 
@@ -62,7 +58,10 @@ class RequestHandlerResolver
         $suitableRequestHandlers = [];
         foreach ($this->requestHandlersConfiguration->getRegisteredRequestHandlers() as $requestHandlerClassName) {
             /** @var RequestHandlerInterface $requestHandler */
-            $requestHandler = $this->objectManager->get($requestHandlerClassName);
+            $requestHandler = $this->container->has($requestHandlerClassName)
+                ? $this->container->get($requestHandlerClassName)
+                : GeneralUtility::makeInstance($requestHandlerClassName)
+            ;
             if ($requestHandler->canHandleRequest()) {
                 $priority = $requestHandler->getPriority();
                 if (isset($suitableRequestHandlers[$priority])) {
-- 
GitLab