diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml
index fc751fa92eee8706e278613ed0c277d0a0091205..6eb57aa7a3c4a1cca28efb0e3d42718164ed0055 100644
--- a/automatic_updates.services.yml
+++ b/automatic_updates.services.yml
@@ -26,6 +26,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates.cron_updater:
     class: Drupal\automatic_updates\CronUpdater
     arguments:
@@ -43,6 +44,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates.staged_projects_validator:
     class: Drupal\automatic_updates\Validator\StagedProjectsValidator
     arguments:
diff --git a/automatic_updates_extensions/automatic_updates_extensions.services.yml b/automatic_updates_extensions/automatic_updates_extensions.services.yml
index 17f0095f3ee299aebe9ede9f32162bd0077aa95c..d2c2a1305bb1e76d2e8b5a4901e89032d0f26212 100644
--- a/automatic_updates_extensions/automatic_updates_extensions.services.yml
+++ b/automatic_updates_extensions/automatic_updates_extensions.services.yml
@@ -11,6 +11,7 @@ services:
       - '@event_dispatcher'
       - '@tempstore.shared'
       - '@datetime.time'
+      - '@PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface'
   automatic_updates_extensions.validator.packages_installed_with_composer:
     class: Drupal\automatic_updates_extensions\Validator\PackagesInstalledWithComposerValidator
     arguments:
diff --git a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
index 01467ce09abe11cff39a095b4b17694ce4661ccb..d14d2af1e9e6d40f185a91a74bcfbdb899ff665f 100644
--- a/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
+++ b/automatic_updates_extensions/tests/src/Kernel/AutomaticUpdatesExtensionsKernelTestBase.php
@@ -7,6 +7,7 @@ use Drupal\automatic_updates_extensions\ExtensionUpdater;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\package_manager\Exception\StageValidationException;
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
+use Drupal\Tests\package_manager\Kernel\TestPathFactory;
 use Drupal\Tests\package_manager\Kernel\TestStageTrait;
 use GuzzleHttp\Client;
 use GuzzleHttp\Handler\MockHandler;
@@ -74,7 +75,8 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
@@ -163,7 +165,8 @@ abstract class AutomaticUpdatesExtensionsKernelTestBase extends AutomaticUpdates
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
diff --git a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
index 6b34a1258fbdb2fe3641b6ddaf160257530632ce..61f0845de0a71a1ac46465c857a608781990d116 100644
--- a/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
+++ b/automatic_updates_extensions/tests/src/Kernel/ExtensionUpdaterTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\automatic_updates_extensions\Kernel;
 
 use Drupal\Tests\automatic_updates\Kernel\AutomaticUpdatesKernelTestBase;
-use Drupal\Tests\package_manager\Kernel\TestPathFactory;
 use Drupal\Tests\user\Traits\UserCreationTrait;
 
 /**
@@ -49,14 +48,7 @@ class ExtensionUpdaterTest extends AutomaticUpdatesKernelTestBase {
 
     $this->createVirtualProject(__DIR__ . '/../../fixtures/fake-site');
 
-    /** @var \Drupal\automatic_updates_extensions\ExtensionUpdater $updater */
-    $updater = $this->container->get('automatic_updates_extensions.updater');
-    // @todo Remove this hack in https://www.drupal.org/i/3303174.
-    $property = new \ReflectionProperty($updater, 'pathFactory');
-    $property->setAccessible(TRUE);
-    $property->setValue($updater, new TestPathFactory());
-
-    $id = $updater->begin([
+    $id = $this->container->get('automatic_updates_extensions.updater')->begin([
       'my_module' => '9.8.1',
       // Use a legacy version number to ensure they are converted to semantic
       // version numbers which will work with the drupal.org Composer facade.
diff --git a/package_manager/src/Stage.php b/package_manager/src/Stage.php
index fa6e9ec412101f3aadbd94198202e48d2602ee36..f7d000b311182c2aecf62574cabff97637129ed7 100644
--- a/package_manager/src/Stage.php
+++ b/package_manager/src/Stage.php
@@ -28,6 +28,7 @@ use PhpTuf\ComposerStager\Domain\Core\Stager\StagerInterface;
 use PhpTuf\ComposerStager\Domain\Exception\InvalidArgumentException;
 use PhpTuf\ComposerStager\Domain\Exception\PreconditionException;
 use PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactory;
+use PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface;
 use PhpTuf\ComposerStager\Infrastructure\Value\PathList\PathList;
 use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
 
@@ -190,8 +191,10 @@ class Stage {
    *   The shared tempstore factory.
    * @param \Drupal\Component\Datetime\TimeInterface $time
    *   The time service.
+   * @param \PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface $path_factory
+   *   (optional) The path factory service.
    */
-  public function __construct(ConfigFactoryInterface $config_factory, PathLocator $path_locator, BeginnerInterface $beginner, StagerInterface $stager, CommitterInterface $committer, FileSystemInterface $file_system, EventDispatcherInterface $event_dispatcher, SharedTempStoreFactory $shared_tempstore, TimeInterface $time) {
+  public function __construct(ConfigFactoryInterface $config_factory, PathLocator $path_locator, BeginnerInterface $beginner, StagerInterface $stager, CommitterInterface $committer, FileSystemInterface $file_system, EventDispatcherInterface $event_dispatcher, SharedTempStoreFactory $shared_tempstore, TimeInterface $time, PathFactoryInterface $path_factory = NULL) {
     $this->configFactory = $config_factory;
     $this->pathLocator = $path_locator;
     $this->beginner = $beginner;
@@ -201,7 +204,7 @@ class Stage {
     $this->eventDispatcher = $event_dispatcher;
     $this->time = $time;
     $this->tempStore = $shared_tempstore->get('package_manager_stage');
-    $this->pathFactory = new PathFactory();
+    $this->pathFactory = $path_factory ?: new PathFactory();
   }
 
   /**
diff --git a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
index 232150a8e1a7ba5ef7604efad0527df547ffeca3..61e54d7658607177f9acfde4d2d3b5147e3f8f49 100644
--- a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
+++ b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php
@@ -97,7 +97,8 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
       $this->container->get('file_system'),
       $this->container->get('event_dispatcher'),
       $this->container->get('tempstore.shared'),
-      $this->container->get('datetime.time')
+      $this->container->get('datetime.time'),
+      new TestPathFactory()
     );
   }
 
@@ -234,14 +235,6 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase {
  */
 trait TestStageTrait {
 
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(...$arguments) {
-    parent::__construct(...$arguments);
-    $this->pathFactory = new TestPathFactory();
-  }
-
   /**
    * {@inheritdoc}
    */