< configuration > < configSections > < section name ="indexusNetSharedCache" type ="MergeSystem.Indexus.WinServiceCommon.Configuration.Client.IndexusProviderSection, MergeSystem.Indexus.WinServiceCommon" /> </ configSections > < indexusNetSharedCache defaultProvider ="IndexusSharedCacheProvider" > < servers > < add key ="SrvZh03" ipaddress ="192.168.212.21" port ="48888" /> <!-- <add key="RoeePC" ipaddress="10.0.0.15" port="48888" /> <add key="MichaelPC" ipaddress="10.0.0.53" port="48888" /> --> </ servers > < providers > < add name ="IndexusSharedCacheProvider" type ="MergeSystem.Indexus.WinServiceCommon.Provider.Cache.IndexusSharedCacheProvider, MergeSystem.Indexus.WinServiceCommon" > </ add > </ providers > </ indexusNetSharedCache > 配置节 IndexusProviderSection ,其中 成员Servers和 Providers继承于System.Configuration.ConfigurationElementCollection, 而它聚合了System.Configuration.ConfigurationElement派生 ConfigurationElement的派生类包括了一序列的属性,这些属性可以定义默认值和限制取值范围 public class IndexusProviderSection : ConfigurationSection ... { [ConfigurationProperty("providers")] public ProviderSettingsCollection Providers ...{ get ...{ return (ProviderSettingsCollection)base["providers"]; } } [ConfigurationProperty("servers")] public IndexusServerSettingCollection Servers ...{ get ...{ return (IndexusServerSettingCollection)this["servers"]; } } /**//// <summary> /// Gets or sets the default provider, min. 1 server has to be defined. /// </summary> /// <value>The default provider.</value> [StringValidator(MinLength = 1)] [ConfigurationProperty("defaultProvider", DefaultValue = "IndexusSharedCacheProvider")] public string DefaultProvider ...{ get ...{ return (string)base["defaultProvider"]; } set ...{ base["defaultProvider"] = value; } } } public class IndexusServerSettingCollection : System.Configuration.ConfigurationElementCollection ... { public IndexusServerSetting this[int index] ...{ get ...{ return base.BaseGet(index) as IndexusServerSetting; } set ...{ if (base.BaseGet(index) != null) ...{ base.BaseRemoveAt(index); } this.BaseAdd(index, value); } } protected override System.Configuration.ConfigurationElement CreateNewElement() ...{ return new IndexusServerSetting(); } protected override object GetElementKey(System.Configuration.ConfigurationElement element) ...{ return ((IndexusServerSetting)element).Key; } } public class IndexusServerSetting : System.Configuration.ConfigurationElement ... { [System.Configuration.ConfigurationProperty("key", IsRequired = true)] public string Key ...{ get ...{ return this["key"] as string; } } protected override void InitializeDefault() ...{ base.InitializeDefault(); } [System.Configuration.ConfigurationProperty("ipaddress", IsRequired = true)] public string IpAddress ...{ get ...{ return this["ipaddress"] as string; } } [System.Configuration.ConfigurationProperty("port", IsRequired = false)] public string Port ...{ get ...{ return this["port"] as string; } } } 使用方法: foreach (COM.Configuration.Client.IndexusServerSetting server in IndexusDistributionCache.ProviderSection.Servers) ... { serverList.Add(server.IpAddress); } providerCollection = new IndexusProviderCollection(); ProvidersHelper.InstantiateProviders( providerSection.Providers, providerCollection, typeof (IndexusProviderBase) ); providerBase = providerCollection[providerSection.DefaultProvider]; Provider介绍 .net 1.1的做法 http://blog.youkuaiyun.com/anghlq/archive/2006/09/17/1233175.aspx