public void IsNonSharedDisposable_DummyDisposablePolicyUnknown_IsFalse()
		{
			using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyUnknown)))
			using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false))
			{
				var innerPartDefinition = innerCatalog.Parts.First();
				var needsWrapper = wrapperCatalog.IsNonSharedDisposable(innerPartDefinition);
				Assert.IsFalse(needsWrapper);
			}
		}
		public void ChangingEvent()
		{
			using (var aggregate = new AggregateCatalog())
			using (var wrapperCatalog = new DisposableWrapperCatalog(aggregate, false))
			{
				var received = false;
				wrapperCatalog.Changing += (sender, args) => received = true;

				aggregate.Catalogs.Add(new TypeCatalog());
				Assert.IsTrue(received);
			}
		}
		public void WrapperWithoutMemoryLeak()
		{
			using (var typeCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared)))
			using (var wrapperCatalog = new DisposableWrapperCatalog(typeCatalog, false))
			using (var container = new CompositionContainer(wrapperCatalog, false))
			{
				var weak = DisposeAndGetWeak(container);

				// not sure if all this is necessary, but it seams to force GC
				GC.Collect();
				Thread.Sleep(500);
				GC.WaitForFullGCApproach();
				GC.WaitForFullGCComplete();
				GC.WaitForPendingFinalizers();
				GC.Collect();

				DummyDisposablePolicyNonShared target;
				var isAlive = weak.TryGetTarget(out target);
				Assert.IsFalse(isAlive, "Checking IsAlive");
			}
		}
예제 #4
0
 public MefDependencyResolver(DisposableWrapperCatalog log)
 {
     _catalog = log;
 }
		public void ApplicationCatalog(Type contractType, bool expectedIsDisposableNormal, bool expectedIsDisposableWrapped)
		{
			// ApplicationCatalog is a good comprehensive test because it uses the following hierarchy:
			// + AggregateCatalog
			//   + DirectoryCatalog
			//     + AssemblyCatalog
			//       + TypeCatalog

			using (var innerCatalog = new ApplicationCatalog())
			using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false))
			{
				const ImportCardinality cardinality = ImportCardinality.ExactlyOne;
				var metadata = new Dictionary<string, object>();
				var typeIdentity = AttributedModelServices.GetTypeIdentity(contractType);
				var contractName = AttributedModelServices.GetContractName(contractType);
				var definition = new ContractBasedImportDefinition(contractName, typeIdentity, null, cardinality, false, true, CreationPolicy.Any, metadata);

				var partNormal = innerCatalog.GetExports(definition).Single().Item1.CreatePart();
				var partWrapped = wrapperCatalog.GetExports(definition).Single().Item1.CreatePart();

				var isDisposableNormal = partNormal is IDisposable;
				var isDisposableWrapped = partWrapped is IDisposable;

				Assert.AreEqual(expectedIsDisposableNormal, isDisposableNormal, "Checking Normal Part");
				Assert.AreEqual(expectedIsDisposableWrapped, isDisposableWrapped, "Checking Wrapped Part");
			}
		}
		public void CreatePart_DummyDisposablePolicyNonShared_IsNotDisposable()
		{
			using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared)))
			using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false))
			{
				var partDefinition = wrapperCatalog.Parts.Single();
				var part = partDefinition.CreatePart();
				Assert.IsNotInstanceOf<IDisposable>(part);
			}
		}
		public void CreateWrapper_UsesPreExistingWrapper()
		{
			using (var innerCatalog = new TypeCatalog(typeof(DummyDisposablePolicyNonShared)))
			using (var wrapperCatalog = new DisposableWrapperCatalog(innerCatalog, false))
			{
				var partDefinition1 = wrapperCatalog.Parts.Single();
				var partDefinition2 = wrapperCatalog.CreateWrapper(partDefinition1);
				Assert.AreSame(partDefinition1, partDefinition2);
			}
		}