From 115316729d24f869b464415a39f31ef3b29f166a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Mu=CC=88ller?= Date: Tue, 9 Sep 2025 10:37:50 +0200 Subject: [PATCH] TASK: Avoid prototype injection in constructors This removes occurances of constructor injection with prototypes, the modified classes are all injected via constructor and should therefore be singletons. Related: neos/flow-development-collection#3494 --- Neos.Neos/Classes/AssetUsage/Domain/AssetUsageRepository.php | 2 ++ .../Classes/AssetUsage/Service/AssetUsageIndexingService.php | 2 ++ .../SoftRemoval/ImpendingHardRemovalConflictRepository.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Neos.Neos/Classes/AssetUsage/Domain/AssetUsageRepository.php b/Neos.Neos/Classes/AssetUsage/Domain/AssetUsageRepository.php index db501f0b9bf..58db5aa2a6d 100644 --- a/Neos.Neos/Classes/AssetUsage/Domain/AssetUsageRepository.php +++ b/Neos.Neos/Classes/AssetUsage/Domain/AssetUsageRepository.php @@ -16,12 +16,14 @@ use Neos\ContentRepository\Core\SharedModel\ContentRepository\ContentRepositoryId; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateId; use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName; +use Neos\Flow\Annotations\Scope; use Neos\Neos\AssetUsage\Dto\AssetUsageFilter; use Neos\Neos\AssetUsage\Dto\AssetUsages; /** * @internal Not meant to be used in user land code. In order to look up asset usages the AssetUsageService or GlobalAssetUsageService can be used */ +#[Scope("singleton")] final class AssetUsageRepository { public const TABLE = 'neos_asset_usage'; diff --git a/Neos.Neos/Classes/AssetUsage/Service/AssetUsageIndexingService.php b/Neos.Neos/Classes/AssetUsage/Service/AssetUsageIndexingService.php index 76a5dba8a60..f61b26c42d9 100644 --- a/Neos.Neos/Classes/AssetUsage/Service/AssetUsageIndexingService.php +++ b/Neos.Neos/Classes/AssetUsage/Service/AssetUsageIndexingService.php @@ -15,6 +15,7 @@ use Neos\ContentRepository\Core\SharedModel\Workspace\Workspace; use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName; use Neos\ContentRepository\Core\SharedModel\Workspace\Workspaces; +use Neos\Flow\Annotations\Scope; use Neos\Flow\Persistence\Doctrine\PersistenceManager; use Neos\Media\Domain\Model\AssetInterface; use Neos\Media\Domain\Model\AssetVariantInterface; @@ -34,6 +35,7 @@ * 2. Which cache entries do I need to flush on a change to an asset (this requires an additional traversal over all * dependent workspaces). */ +#[Scope("singleton")] final class AssetUsageIndexingService { /** @var array */ diff --git a/Neos.Neos/Classes/Domain/SubtreeTagging/SoftRemoval/ImpendingHardRemovalConflictRepository.php b/Neos.Neos/Classes/Domain/SubtreeTagging/SoftRemoval/ImpendingHardRemovalConflictRepository.php index 09d2b1e69ef..eb85a9398ad 100644 --- a/Neos.Neos/Classes/Domain/SubtreeTagging/SoftRemoval/ImpendingHardRemovalConflictRepository.php +++ b/Neos.Neos/Classes/Domain/SubtreeTagging/SoftRemoval/ImpendingHardRemovalConflictRepository.php @@ -19,8 +19,10 @@ use Neos\ContentRepository\Core\SharedModel\ContentRepository\ContentRepositoryId; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateId; use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName; +use Neos\Flow\Annotations\Scope; /** @internal */ +#[Scope("singleton")] final readonly class ImpendingHardRemovalConflictRepository { private const CONFLICT_TABLE_NAME = 'neos_neos_impending_hard_removal_conflict';