/// <summary>
        /// 从xml文件流中得到提供信息
        /// </summary>
        /// <param name="reader">可读流</param>
        public static ProviderConfiguration GetProvider(System.IO.TextReader reader)
        {
            ProviderConfiguration providers = new ProviderConfiguration();

            //providers._ProviderAttribute = filename;
            System.Xml.XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            providers._ProviderType = doc.DocumentElement.Attributes["providerType"] == null ? "" : doc.DocumentElement.Attributes["providerType"].Value;
            foreach (XmlNode node2 in doc.DocumentElement.ChildNodes)
            {
                if (node2.Name == "providers")
                {
                    providers.GetProviders(node2);
                }
            }
            return(providers);
        }
        public static ProviderConfiguration GetProvider(string filename)
        {
            if (_cache.ContainsKey(filename))
            {
                return(_cache[filename]);
            }
            ProviderConfiguration providers = null;

            if (System.IO.File.Exists(filename))
            {
                lock (_cache)
                {
                    providers = GetProvider(System.IO.File.OpenRead(filename));
                    _cache.Add(filename, providers);
                }
            }
            //}
            return(providers);
        }
        /// <summary>
        /// 从xml文件流中得到提供信息
        /// </summary>
        /// <param name="reader">可读文本流</param>
        /// <param name="group">组</param>
        /// <returns></returns>
        public static ProviderConfiguration GetProvider(System.IO.TextReader reader, string group)
        {
            ProviderConfiguration providers = new ProviderConfiguration();

            //providers._ProviderAttribute = filename;
            System.Xml.XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            XmlNodeList list = doc.DocumentElement.SelectNodes(String.Format("providers[@group='{0}']", group));

            providers._ProviderType = doc.DocumentElement.Attributes["providerType"] == null ? "" : doc.DocumentElement.Attributes["providerType"].Value;
            foreach (XmlNode node2 in list)
            {
                if (node2.Name == "providers")
                {
                    if (node2.Attributes["providerType"] != null)
                    {
                        providers._ProviderType = node2.Attributes["providerType"].Value;
                    }
                    providers.GetProviders(node2);
                }
            }
            return(providers);
        }
        public static ProviderConfiguration GetProvider(string filename)
        {
            if (_cache.ContainsKey(filename))
            {
                return(_cache[filename]);
            }
            ProviderConfiguration providers = null;

            if (System.IO.File.Exists(filename))
            {
                lock (_cache)
                {
                    providers = GetProvider(System.IO.File.OpenRead(filename));
                    _cache.Add(filename, providers);
                }
            }
            else
            {
                throw new System.IO.FileNotFoundException("没有找到文件", filename);
            }
            //}
            return(providers);
        }
 public ProviderHashtable(ProviderConfiguration pr)
 {
     this.pr = pr;
 }