Exemple #1
0
        /// <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);
        }
Exemple #2
0
 private ResolverTree(Framework framework, ResolverImpl resolver)
 {
     resolvers           = new ResolverNodeCollection();
     trackCache          = new Hashtable();
     leafResolverBundles = new Hashtable();
     this.resolver       = resolver;
     this.framework      = framework;
 }
Exemple #3
0
 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);
 }