diff --git a/typo3/sysext/extbase/Classes/Object/Container/Container.php b/typo3/sysext/extbase/Classes/Object/Container/Container.php
index 4d7682525385b70041f80cee88e964b739df42f8..24a86b2bae6fff082e6a6854d94711a401c47a9f 100644
--- a/typo3/sysext/extbase/Classes/Object/Container/Container.php
+++ b/typo3/sysext/extbase/Classes/Object/Container/Container.php
@@ -212,10 +212,14 @@ class Container implements \TYPO3\CMS\Core\SingletonInterface
             if ($classSchema->isSingleton() && !$instanceToInject instanceof \TYPO3\CMS\Core\SingletonInterface) {
                 $this->getLogger()->notice('The singleton "' . $classSchema->getClassName() . '" needs a prototype in "' . $injectPropertyName . '". This is often a bad code smell; often you rather want to inject a singleton.');
             }
-            $propertyReflection = new \ReflectionProperty($instance, $injectPropertyName);
 
-            $propertyReflection->setAccessible(true);
-            $propertyReflection->setValue($instance, $instanceToInject);
+            if ($classSchema->getProperty($injectPropertyName)['public']) {
+                $instance->{$injectPropertyName} = $instanceToInject;
+            } else {
+                $propertyReflection = new \ReflectionProperty($instance, $injectPropertyName);
+                $propertyReflection->setAccessible(true);
+                $propertyReflection->setValue($instance, $instanceToInject);
+            }
         }
     }
 
diff --git a/typo3/sysext/extbase/Tests/Unit/Object/Container/ContainerTest.php b/typo3/sysext/extbase/Tests/Unit/Object/Container/ContainerTest.php
index 91ef94bb8a036be69509d5758b688c091783b9e9..735093f4841de66efd2cfe4aa1619451b9b48932 100644
--- a/typo3/sysext/extbase/Tests/Unit/Object/Container/ContainerTest.php
+++ b/typo3/sysext/extbase/Tests/Unit/Object/Container/ContainerTest.php
@@ -15,9 +15,13 @@ namespace TYPO3\CMS\Extbase\Tests\Unit\Object\Container;
  */
 use Psr\Log\LoggerInterface;
 use TYPO3\CMS\Core\Log\Logger;
+use TYPO3\CMS\Extbase\Object\Container\Container;
 use TYPO3\CMS\Extbase\Object\Exception;
 use TYPO3\CMS\Extbase\Object\Exception\CannotBuildObjectException;
 use TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException;
+use TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures\ArgumentTestClassForPublicPropertyInjection;
+use TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures\ProtectedPropertyInjectClass;
+use TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures\PublicPropertyInjectClass;
 
 /**
  * Test case
@@ -953,4 +957,24 @@ class ContainerTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
             $object->argumentTestClassTwo
         );
     }
+
+    /**
+     * @test
+     */
+    public function getInstanceInjectsPublicProperties()
+    {
+        $container = new Container();
+        $object = $container->getInstance(PublicPropertyInjectClass::class);
+        self::assertInstanceOf(ArgumentTestClassForPublicPropertyInjection::class, $object->foo);
+    }
+
+    /**
+     * @test
+     */
+    public function getInstanceInjectsProtectedProperties()
+    {
+        $container = new Container();
+        $object = $container->getInstance(ProtectedPropertyInjectClass::class);
+        self::assertInstanceOf(ArgumentTestClassForPublicPropertyInjection::class, $object->getFoo());
+    }
 }
diff --git a/typo3/sysext/extbase/Tests/Unit/Object/Container/Fixtures/ContainerPropertyInjectionTestClasses.php b/typo3/sysext/extbase/Tests/Unit/Object/Container/Fixtures/ContainerPropertyInjectionTestClasses.php
new file mode 100644
index 0000000000000000000000000000000000000000..f81af86fc2f18bf84360cf79714fa198e01023c3
--- /dev/null
+++ b/typo3/sysext/extbase/Tests/Unit/Object/Container/Fixtures/ContainerPropertyInjectionTestClasses.php
@@ -0,0 +1,34 @@
+<?php
+declare(strict_types=1);
+
+namespace TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures;
+
+use TYPO3\CMS\Extbase\Annotation\Inject;
+
+class PublicPropertyInjectClass
+{
+    /**
+     * @Inject
+     * @var \TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures\ArgumentTestClassForPublicPropertyInjection
+     */
+    public $foo;
+}
+
+class ArgumentTestClassForPublicPropertyInjection
+{
+}
+
+class ProtectedPropertyInjectClass
+{
+
+    /**
+     * @Inject
+     * @var \TYPO3\CMS\Extbase\Tests\Unit\Object\Container\Fixtures\ArgumentTestClassForPublicPropertyInjection
+     */
+    protected $foo;
+
+    public function getFoo()
+    {
+        return $this->foo;
+    }
+}