1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.ComponentModel.Composition.Primitives;
\r
6 using System.ComponentModel.Composition.Hosting;
\r
8 using System.Linq.Expressions;
\r
10 namespace System.ComponentModel.Composition.Factories
\r
12 partial class CatalogFactory
\r
14 public class FilteredCatalog : ComposablePartCatalog, INotifyComposablePartCatalogChanged
\r
16 private readonly ComposablePartCatalog _inner;
\r
17 private readonly INotifyComposablePartCatalogChanged _innerNotifyChange;
\r
18 private readonly IQueryable<ComposablePartDefinition> _partsQuery;
\r
20 public FilteredCatalog(ComposablePartCatalog inner,
\r
21 Func<ComposablePartDefinition, bool> filter)
\r
24 _innerNotifyChange = inner as INotifyComposablePartCatalogChanged;
\r
25 _partsQuery = inner.Parts.Where(filter).AsQueryable();
\r
28 public override IQueryable<ComposablePartDefinition> Parts
\r
36 public event EventHandler<ComposablePartCatalogChangeEventArgs> Changed
\r
40 if (_innerNotifyChange != null)
\r
41 _innerNotifyChange.Changed += value;
\r
45 if (_innerNotifyChange != null)
\r
46 _innerNotifyChange.Changed -= value;
\r
50 public event EventHandler<ComposablePartCatalogChangeEventArgs> Changing
\r
54 if (_innerNotifyChange != null)
\r
55 _innerNotifyChange.Changing += value;
\r
59 if (_innerNotifyChange != null)
\r
60 _innerNotifyChange.Changing -= value;
\r