コード例 #1
0
        private FilteredCatalog Traverse(IComposablePartCatalogTraversal traversal)
        {
            Assumes.NotNull(traversal);

            // we make sure that the underlyiong catalog cannot change while we are doing the trasversal
            // After thaty traversal is done, the freeze is lifted, and the catalog is free to change, but the changes
            // cannot affect partitioning
            FreezeInnerCatalog();

            try
            {
                traversal.Initialize();
                var traversalClosure = GetTraversalClosure(_innerCatalog.Where(_filter), traversal);
                return(new FilteredCatalog(_innerCatalog, p => traversalClosure.Contains(p)));
            }
            finally
            {
                UnfreezeInnerCatalog();
            }
        }
コード例 #2
0
 private static void GetTraversalClosure(IEnumerable <ComposablePartDefinition> parts, HashSet <ComposablePartDefinition> traversedParts, IComposablePartCatalogTraversal traversal)
 {
     foreach (var part in parts)
     {
         if (traversedParts.Add(part))
         {
             IEnumerable <ComposablePartDefinition> partsToTraverse = null;
             if (traversal.TryTraverse(part, out partsToTraverse))
             {
                 GetTraversalClosure(partsToTraverse, traversedParts, traversal);
             }
         }
     }
 }
コード例 #3
0
        private static HashSet <ComposablePartDefinition> GetTraversalClosure(IEnumerable <ComposablePartDefinition> parts, IComposablePartCatalogTraversal traversal)
        {
            Assumes.NotNull(traversal);

            var traversedParts = new HashSet <ComposablePartDefinition>();

            GetTraversalClosure(parts, traversedParts, traversal);
            return(traversedParts);
        }
コード例 #4
0
 private FilteredCatalog Traverse(IComposablePartCatalogTraversal traversal !!)
 {
コード例 #5
0
        private static HashSet <ComposablePartDefinition> GetTraversalClosure(IEnumerable <ComposablePartDefinition> parts, IComposablePartCatalogTraversal traversal)
        {
            if (traversal == null)
            {
                throw new ArgumentNullException(nameof(traversal));
            }
            var traversedParts = new HashSet <ComposablePartDefinition>();

            GetTraversalClosure(parts, traversedParts, traversal);
            return(traversedParts);
        }