public void ContainerDispose_SharedPart_ShouldCollectWholeObjectChain() { // Test only works properly with while using the real ConditionalWeakTable var container = GetContainer(); var export = container.GetExport<SharedImporter>(); var exportedValue = export.Value; container.Dispose(); var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( exportedValue, exportedValue.AnyPartDisposable, exportedValue.AnyPartDisposableRecomposable, exportedValue.AnyPartRecomposable, exportedValue.AnyPartSimple); export = null; exportedValue = null; refTracker.CollectAndAssert(); GC.KeepAlive(container); }
public void AddRemovePart_NonSharedPart_ShouldCollectWholeObjectChain() { var container = GetContainer(); var exportedValue = new NonSharedImporter(); CompositionBatch batch = new CompositionBatch(); var part = batch.AddPart(exportedValue); container.Compose(batch); batch = null; batch = new CompositionBatch(); batch.RemovePart(part); container.Compose(batch); batch = null; var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( exportedValue, exportedValue.AnyPartDisposable, exportedValue.AnyPartDisposableRecomposable, exportedValue.AnyPartRecomposable, exportedValue.AnyPartSimple); part = null; exportedValue = null; refTracker.CollectAndAssert(); GC.KeepAlive(container); }
public void NonSharedPart_Simple_ShouldBeCollected() { var catalog = new TypeCatalog(typeof(NonSharedPartSimple)); var container = new CompositionContainer(catalog); var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( container.GetExportedValue<NonSharedPartSimple>()); refTracker.CollectAndAssert(); GC.KeepAlive(container); }
public void GetReleaseExport_NonSharedPart_ShouldCollectWholeObjectChain() { var container = GetContainer(); var export = container.GetExport<NonSharedImporter>(); var exportedValue = export.Value; container.ReleaseExport(export); var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( exportedValue, exportedValue.AnyPartDisposable, exportedValue.AnyPartDisposableRecomposable, exportedValue.AnyPartRecomposable, exportedValue.AnyPartSimple); export = null; exportedValue = null; refTracker.CollectAndAssert(); GC.KeepAlive(container); }
public void NonSharedPart_RecomposableImport_NoReference_ShouldBeCollected() { var catalog = new TypeCatalog(typeof(NonSharedPartRecomposable)); var container = new CompositionContainer(catalog); // Setup dependency CompositionBatch batch = new CompositionBatch(); var valueKey = batch.AddExportedValue("Value", 21); container.Compose(batch); batch = null; var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( container.GetExportedValue<NonSharedPartRecomposable>()); refTracker.CollectAndAssert(); // Recompose just to ensure we don't blow up, even though we don't expect anything to happen. batch = new CompositionBatch(); batch.RemovePart(valueKey); batch.AddExportedValue("Value", 42); container.Compose(batch); batch = null; GC.KeepAlive(container); }
public void ChildContainerDispose_NonSharedPart_ShouldOnlyCleanupChildAndSimpleNonShared() { var child = CreateParentChildContainerWithNonSharedImporter(); var exportedValue = child.GetExportedValue<NonSharedImporter>(); child.Dispose(); var refTracker = new ReferenceTracker(); refTracker.AddReferencesExpectedToBeCollected( exportedValue, // object in child exportedValue.AnyPartSimple, // No reference parent so collected. exportedValue.AnyPartRecomposable); // These are in the parent and will not be cleaned out refTracker.AddReferencesNotExpectedToBeCollected( exportedValue.AnyPartDisposable, exportedValue.AnyPartDisposableRecomposable); exportedValue = null; refTracker.CollectAndAssert(); GC.KeepAlive(child); }
public void NonSharedImporter_ReleaseReference_ShouldCollectWholeChain() { var container = GetContainer(); var export = container.GetExport<NonSharedImporter>(); var exportedValue = export.Value; var refTracker = new ReferenceTracker(); // Non-Disposable references in the chain should be GC'ed refTracker.AddReferencesExpectedToBeCollected( exportedValue, exportedValue.AnyPartRecomposable, exportedValue.AnyPartSimple); // Disposable references in the chain should NOT be GC'ed refTracker.AddReferencesNotExpectedToBeCollected( exportedValue.AnyPartDisposable, exportedValue.AnyPartDisposableRecomposable); export = null; exportedValue = null; refTracker.CollectAndAssert(); GC.KeepAlive(container); }