diff --git a/Assets/Reflex.EditModeTests/GarbageCollectionTests.cs b/Assets/Reflex.EditModeTests/GarbageCollectionTests.cs index d0a48956..ce3b799b 100644 --- a/Assets/Reflex.EditModeTests/GarbageCollectionTests.cs +++ b/Assets/Reflex.EditModeTests/GarbageCollectionTests.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using FluentAssertions; using NUnit.Framework; @@ -22,12 +21,6 @@ public static void ForceGarbageCollection() GC.WaitForPendingFinalizers(); } - [Conditional("REFLEX_DEBUG")] - public static void MarkAsInconclusiveWhenReflexDebugIsEnabled() - { - Assert.Inconclusive("Disable REFLEX_DEBUG symbol when running garbage collection tests!"); - } - [Test, Retry(3)] public void Singleton_ShouldBeFinalized_WhenOwnerIsDisposed() { diff --git a/Assets/Reflex.EditModeTests/ScopedTests.cs b/Assets/Reflex.EditModeTests/ScopedTests.cs index 62d242d7..fe8f492a 100644 --- a/Assets/Reflex.EditModeTests/ScopedTests.cs +++ b/Assets/Reflex.EditModeTests/ScopedTests.cs @@ -96,8 +96,6 @@ public void ScopedFromFactory_ConstructedInstances_ShouldBeDisposed_WithinConstr [Test, Retry(3)] public void ScopedFromType_ConstructedInstances_ShouldBeCollected_WhenConstructingContainerIsDisposed() { - GarbageCollectionTests.MarkAsInconclusiveWhenReflexDebugIsEnabled(); - WeakReference instanceConstructedByChild; WeakReference instanceConstructedByParent; var parentContainer = new ContainerBuilder().AddScoped(typeof(Service)).Build(); @@ -120,8 +118,6 @@ void Act() [Test, Retry(3)] public void ScopedFromFactory_ConstructedInstances_ShouldBeCollected_WhenConstructingContainerIsDisposed() { - GarbageCollectionTests.MarkAsInconclusiveWhenReflexDebugIsEnabled(); - WeakReference instanceConstructedByChild; WeakReference instanceConstructedByParent; var parentContainer = new ContainerBuilder().AddScoped(_ => new Service()).Build(); diff --git a/Assets/Reflex.EditModeTests/TransientTests.cs b/Assets/Reflex.EditModeTests/TransientTests.cs index 07a5fb8f..b1798482 100644 --- a/Assets/Reflex.EditModeTests/TransientTests.cs +++ b/Assets/Reflex.EditModeTests/TransientTests.cs @@ -50,8 +50,6 @@ public void TransientFromFactory_ConstructedInstances_ShouldBeDisposed_WithinCon [Test, Retry(3)] public void TransientFromType_ConstructedInstances_ShouldBeCollected_WhenConstructingContainerIsDisposed() { - GarbageCollectionTests.MarkAsInconclusiveWhenReflexDebugIsEnabled(); - WeakReference instanceConstructedByChild; WeakReference instanceConstructedByParent; var parentContainer = new ContainerBuilder().AddTransient(typeof(Service)).Build(); @@ -74,8 +72,6 @@ void Act() [Test, Retry(3)] public void TransientFromFactory_ConstructedInstances_ShouldBeCollected_WhenConstructingContainerIsDisposed() { - GarbageCollectionTests.MarkAsInconclusiveWhenReflexDebugIsEnabled(); - WeakReference instanceConstructedByChild; WeakReference instanceConstructedByParent; var parentContainer = new ContainerBuilder().AddTransient(c => new Service()).Build(); diff --git a/Assets/Reflex/Diagnosis/Diagnosis.cs b/Assets/Reflex/Diagnosis/Diagnosis.cs index fcc95c49..cac3331f 100644 --- a/Assets/Reflex/Diagnosis/Diagnosis.cs +++ b/Assets/Reflex/Diagnosis/Diagnosis.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Reflex.Core; @@ -19,7 +20,7 @@ internal static void IncrementResolutions(IResolver resolver) [Conditional("REFLEX_DEBUG")] internal static void RegisterInstance(IResolver resolver, object instance) { - resolver.GetDebugProperties().Instances.Add((instance, GetCallSite(3))); + resolver.GetDebugProperties().Instances.Add((new WeakReference(instance), GetCallSite(3))); } [Conditional("REFLEX_DEBUG")] diff --git a/Assets/Reflex/Editor/DebuggingWindow/ReflexDebuggerWindow.cs b/Assets/Reflex/Editor/DebuggingWindow/ReflexDebuggerWindow.cs index f8d603b9..26d5a6af 100644 --- a/Assets/Reflex/Editor/DebuggingWindow/ReflexDebuggerWindow.cs +++ b/Assets/Reflex/Editor/DebuggingWindow/ReflexDebuggerWindow.cs @@ -165,10 +165,10 @@ private void BuildDataRecursively(MyTreeElement parent, Container container) kind: pair.Item1.GetType().Name.Replace("Singleton", string.Empty).Replace("Transient", string.Empty).Replace("Scoped", string.Empty).Replace("Resolver", string.Empty) ); - foreach (var (instance, callsite) in pair.Item1.GetDebugProperties().Instances) + foreach (var (instance, callsite) in pair.Item1.GetDebugProperties().Instances.Where(tuple => tuple.Item1.IsAlive).Select(tuple => (tuple.Item1.Target, tuple.Item2))) { var instanceTreeElement = new MyTreeElement( - $"{instance.GetType().GetName()} ({SHA1.ShortHash(instance.GetHashCode())})", + $"{instance.GetType().GetName()} ({SHA1.ShortHash(instance.GetHashCode())})", resolverTreeElement.Depth + 1, ++_id, InstanceIcon, diff --git a/Assets/Reflex/Resolvers/ResolverDebugProperties.cs b/Assets/Reflex/Resolvers/ResolverDebugProperties.cs index ca34a1ee..9bb5560b 100644 --- a/Assets/Reflex/Resolvers/ResolverDebugProperties.cs +++ b/Assets/Reflex/Resolvers/ResolverDebugProperties.cs @@ -1,11 +1,12 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Reflex.Resolvers { public sealed class ResolverDebugProperties { public int Resolutions; - public List<(object, List)> Instances { get; } = new(); + public List<(WeakReference, List)> Instances { get; } = new(); public List BindingCallsite { get; } = new(); } } \ No newline at end of file