1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.ComponentModel.Composition.Primitives;
\r
7 using System.Collections.Generic;
\r
8 using System.Collections.ObjectModel;
\r
9 using System.ComponentModel.Composition.Hosting;
\r
11 namespace System.ComponentModel.Composition.Factories
\r
13 partial class CatalogFactory
\r
15 public class MutableComposablePartCatalog : ComposablePartCatalog, INotifyComposablePartCatalogChanged
\r
17 private readonly HashSet<ComposablePartDefinition> _definitions;
\r
19 public MutableComposablePartCatalog(IEnumerable<ComposablePartDefinition> definitions)
\r
21 _definitions = new HashSet<ComposablePartDefinition>(definitions);
\r
24 public void AddDefinition(ComposablePartDefinition definition)
\r
26 OnDefinitionsChanged(definition, true);
\r
29 public void RemoveDefinition(ComposablePartDefinition definition)
\r
31 OnDefinitionsChanged(definition, false);
\r
34 public override IQueryable<ComposablePartDefinition> Parts
\r
36 get { return _definitions.AsQueryable(); }
\r
39 private void OnDefinitionsChanged(ComposablePartDefinition definition, bool added)
\r
41 ComposablePartDefinition[] addedDefinitions = added ? new ComposablePartDefinition[] { definition } : new ComposablePartDefinition[0];
\r
42 ComposablePartDefinition[] removeDefinitions = added ? new ComposablePartDefinition[0] : new ComposablePartDefinition[] { definition };
\r
44 var e = new ComposablePartCatalogChangeEventArgs(addedDefinitions, removeDefinitions, null);
\r
49 _definitions.Add(definition);
\r
53 _definitions.Remove(definition);
\r
56 if (Changed != null)
\r
62 public event EventHandler<ComposablePartCatalogChangeEventArgs> Changed;
\r
64 public event EventHandler<ComposablePartCatalogChangeEventArgs> Changing;
\r