From 3b9ef408843ab95ae6c758ab48afb068baf63b80 Mon Sep 17 00:00:00 2001
From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com>
Date: Tue, 2 Dec 2025 17:29:52 +0000
Subject: [PATCH 01/12] Refactor object lifecycle management and property
injection services
---
.../PropertyInjectionCache.cs | 50 +-
TUnit.Engine/Building/TestBuilder.cs | 21 +-
.../Framework/TUnitServiceProvider.cs | 34 +-
.../Services/DataSourceInitializer.cs | 243 ---------
.../Services/EventReceiverOrchestrator.cs | 5 +-
.../Services/ObjectGraphDiscoveryService.cs | 198 ++++++++
.../Services/ObjectLifecycleService.cs | 282 +++++++++++
.../Services/ObjectRegistrationService.cs | 101 ----
TUnit.Engine/Services/PropertyDataResolver.cs | 182 -------
.../PropertyInitializationOrchestrator.cs | 213 --------
.../Services/PropertyInjectionService.cs | 206 --------
TUnit.Engine/Services/PropertyInjector.cs | 462 ++++++++++++++++++
.../TestArgumentRegistrationService.cs | 146 +-----
TUnit.Engine/Services/TestFilterService.cs | 2 +-
TUnit.Engine/TestInitializer.cs | 64 +--
15 files changed, 1003 insertions(+), 1206 deletions(-)
delete mode 100644 TUnit.Engine/Services/DataSourceInitializer.cs
create mode 100644 TUnit.Engine/Services/ObjectGraphDiscoveryService.cs
create mode 100644 TUnit.Engine/Services/ObjectLifecycleService.cs
delete mode 100644 TUnit.Engine/Services/ObjectRegistrationService.cs
delete mode 100644 TUnit.Engine/Services/PropertyDataResolver.cs
delete mode 100644 TUnit.Engine/Services/PropertyInitializationOrchestrator.cs
delete mode 100644 TUnit.Engine/Services/PropertyInjectionService.cs
create mode 100644 TUnit.Engine/Services/PropertyInjector.cs
diff --git a/TUnit.Core/PropertyInjection/PropertyInjectionCache.cs b/TUnit.Core/PropertyInjection/PropertyInjectionCache.cs
index c883dfc858..b94917c014 100644
--- a/TUnit.Core/PropertyInjection/PropertyInjectionCache.cs
+++ b/TUnit.Core/PropertyInjection/PropertyInjectionCache.cs
@@ -1,24 +1,22 @@
-using System.Diagnostics.CodeAnalysis;
-using TUnit.Core.Data;
+using TUnit.Core.Data;
namespace TUnit.Core.PropertyInjection;
///
-/// Provides caching functionality for property injection operations.
-/// Follows Single Responsibility Principle by focusing only on caching.
+/// Provides pure caching functionality for property injection metadata.
+/// Follows Single Responsibility Principle - only caches type metadata, no execution logic.
///
/// This cache supports both execution modes:
/// - Source Generation Mode: Uses pre-compiled property setters and metadata
/// - Reflection Mode: Uses runtime discovery and dynamic property access
///
-/// The IL2067 suppressions are necessary because types come from runtime objects
-/// (via GetType() calls) which cannot have compile-time annotations.
+/// Instance-level injection tracking has been moved to ObjectLifecycleService
+/// to maintain SRP (caching vs execution are separate concerns).
///
internal static class PropertyInjectionCache
{
private static readonly ThreadSafeDictionary _injectionPlans = new();
private static readonly ThreadSafeDictionary _shouldInjectCache = new();
- private static readonly ThreadSafeDictionary