public void Dispose() { var parts = new TypeCatalog(typeof(FooImpl), typeof(FooImpl2), typeof(FooImpl2)).Parts; var exports = parts.Select(p => Tuple.Create(p, p.ExportDefinitions.First())); TestCatalog catalog = new TestCatalog( () => parts, () => exports); var import = parts.SelectMany(p => p.ImportDefinitions).First(); CompositionScopeDefinition scope = new CompositionScopeDefinition(catalog, null); scope.Dispose(); var ex = ExceptionAssert.Throws <ObjectDisposedException>(RetryMode.DoNotRetry, () => { var ps = scope.Parts; }); ex = ExceptionAssert.Throws <ObjectDisposedException>(RetryMode.DoNotRetry, () => { var es = scope.GetExports(import); }); scope.Dispose(); ex = ExceptionAssert.Throws <ObjectDisposedException>(RetryMode.DoNotRetry, () => { var ps = scope.Parts; }); ex = ExceptionAssert.Throws <ObjectDisposedException>(RetryMode.DoNotRetry, () => { var es = scope.GetExports(import); }); }
public void Notifications() { var parts = new TypeCatalog(typeof(FooImpl), typeof(FooImpl2), typeof(FooImpl2)).Parts; var exports = parts.Select(p => Tuple.Create(p, p.ExportDefinitions.First())); TestCatalog catalog = new TestCatalog( () => parts, () => exports); CompositionScopeDefinition scope = new CompositionScopeDefinition(catalog, null); ComposablePartCatalogChangeEventArgs args = new ComposablePartCatalogChangeEventArgs(Enumerable.Empty <ComposablePartDefinition>(), Enumerable.Empty <ComposablePartDefinition>(), null); bool changedFired = false; scope.Changed += new EventHandler <ComposablePartCatalogChangeEventArgs>((o, e) => { Assert.AreSame(args, e); Assert.AreSame(scope, o); changedFired = true; }); bool changingFired = false; scope.Changing += new EventHandler <ComposablePartCatalogChangeEventArgs>((o, e) => { Assert.AreSame(args, e); Assert.AreSame(scope, o); changingFired = true; }); catalog.OnChanged(args); Assert.IsTrue(changedFired); catalog.OnChanging(args); Assert.IsTrue(changingFired); changedFired = false; changingFired = false; scope.Dispose(); catalog.OnChanged(args); catalog.OnChanging(args); Assert.IsFalse(changedFired); Assert.IsFalse(changingFired); }