1
// -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
5 using System
.ComponentModel
.Composition
.Factories
;
6 using System
.ComponentModel
.Composition
.Hosting
;
8 using System
.UnitTesting
;
9 using Microsoft
.VisualStudio
.TestTools
.UnitTesting
;
11 namespace System
.ComponentModel
.Composition
14 public class CompositionContainerExtensibilityTests
17 public void Dispose_DoesNotThrow()
19 var container
= CreateCustomCompositionContainer();
24 public void DerivedCompositionContainer_CanExportItself()
26 var container
= CreateCustomCompositionContainer();
27 container
.AddAndComposeExportedValue
<CustomCompositionContainer
>(container
);
29 Assert
.AreSame(container
, container
.GetExportedValue
<CustomCompositionContainer
>());
33 public void ICompositionService_CanBeExported()
35 var container
= CreateCustomCompositionContainer();
36 container
.AddAndComposeExportedValue
<ICompositionService
>(container
);
38 Assert
.AreSame(container
, container
.GetExportedValue
<ICompositionService
>());
42 public void CompositionContainer_CanBeExported()
44 var container
= CreateCustomCompositionContainer();
45 container
.AddAndComposeExportedValue
<CompositionContainer
>(container
);
47 Assert
.AreSame(container
, container
.GetExportedValue
<CompositionContainer
>());
51 public void CanBeCollectedAfterDispose()
53 AggregateExportProvider exportProvider
= new AggregateExportProvider();
54 var catalog
= new AggregateCatalog(CatalogFactory
.CreateDefaultAttributed());
55 var container
= new CompositionContainer(catalog
, exportProvider
);
57 WeakReference weakContainer
= new WeakReference(container
);
62 GC
.WaitForPendingFinalizers();
64 Assert
.IsFalse(weakContainer
.IsAlive
);
66 GC
.KeepAlive(exportProvider
);
67 GC
.KeepAlive(catalog
);
70 private CustomCompositionContainer
CreateCustomCompositionContainer()
72 return new CustomCompositionContainer();
75 // Type needs to be public otherwise container.GetExportedValue<CustomCompositionContainer>
76 // fails on Silverlight because it cannot construct a Lazy<T,M> factory.
77 public class CustomCompositionContainer
: CompositionContainer