/// <summary> /// 扫描解析插件的层次,最终获取一个有序的列表 /// </summary> /// <param name="bundles"></param> /// <param name="resolvers"></param> public void ScanBundlesByOrder(IList <AbstractBundle> bundles, IList <ResolverNode> resolvers) { if (resolvers.Count == 0) { return; } // 定义层次列表 ResolverNodeCollection providers = new ResolverNodeCollection(); // 扫描上一级层次 foreach (var resolver in resolvers) { if (resolver.DepencyProvidersBy.Count == 0) { continue; } // 获取当前解析插件的所有依赖插件,并进行降序排列 ResolverNode[] resolverBundles = resolver.DepencyProvidersBy.ToArray(); foreach (var provider in resolverBundles) { if (provider.DesLevel == resolver.DesLevel + 1) { providers.Add(provider); } } } // 调整扫描的层次链表 ResolverNode[] newResolvers = providers.ToArray(); BundleUtil.Sort(newResolvers, 0, newResolvers.Length); // 合并当前层次 Combine(bundles, newResolvers); // 扫描下一个子层次结构 this.ScanBundlesByOrder(bundles, newResolvers); }
private ResolverTree(Framework framework, ResolverImpl resolver) { resolvers = new ResolverNodeCollection(); trackCache = new Hashtable(); leafResolverBundles = new Hashtable(); this.resolver = resolver; this.framework = framework; }
public ResolverNode(ResolverTree resolverAdmin, AbstractBundle bundle, ResolverNode depencyProviderBy) { this.resolverAdmin = resolverAdmin; this.depencyProvidersBy = new ResolverNodeCollection(); dependencies = new ResolverNodeCollection(); this.bundle = bundle; this.depencyProvidersBy.Add(depencyProviderBy); }