<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>
<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; }
}
}
{
[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 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;
}
}
}
{
[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);
}
{
serverList.Add(server.IpAddress);
}
providerCollection = new IndexusProviderCollection();
ProvidersHelper.InstantiateProviders(
providerSection.Providers,
providerCollection,
typeof(IndexusProviderBase)
);
providerBase = providerCollection[providerSection.DefaultProvider];
ProvidersHelper.InstantiateProviders(
providerSection.Providers,
providerCollection,
typeof(IndexusProviderBase)
);
providerBase = providerCollection[providerSection.DefaultProvider];
Provider介绍
.net 1.1的做法
http://blog.csdn.net/anghlq/archive/2006/09/17/1233175.aspx