当前讲述的是控制台项目下的App.config文件配置使用
单节点特性实现
第一步新建控制台项目 TestRedis,确认项目是否引用了System.Configuration
如果没有,手动添加Nuget包
第二步新建配置文件实体类RedisConfig.cs 继承 ConfigurationSection
namespace TestRedis
{
public class RedisConfig:ConfigurationSection
{
public static RedisConfig GetConfig()
{
return GetConfig("RedisConfig");
}
/// <summary>
/// 配置文件Redis链接字符
/// </summary>
/// <param name="sectionstring"></param>
/// <returns></returns>
public static RedisConfig GetConfig(string sectionname)
{
RedisConfig section=(RedisConfig)ConfigurationManager.GetSection(sectionname);
if (section==null)
{
throw new ConfigurationErrorsException("Section["+ sectionname + "] is not found");
}
return section;
}
/// <summary>
/// 可写的Redis链接地址,IsRequired为false时,节点可以忽略该特性配置
/// </summary>
///
[ConfigurationProperty("WriteServerConStr", DefaultValue ="",IsRequired =true,IsKey =false)]
public string WriteServerConStr
{
get
{
return (string)base["WriteServerConStr"];
}
set
{
base["WriteServerConStr"] = value;
}
}
/// <summary>
/// 可读的Redis链接地址
/// </summary>
///
[ConfigurationProperty("ReadServerConStr", DefaultValue = "", IsRequired = true, IsKey = false)]
public string ReadServerConStr
{
get
{
return (string)base["ReadServerConStr"];
}
set
{
base["ReadServerConStr"] = value;
}
}
[ConfigurationProperty("MaxWritePoolSize", DefaultValue = "", IsRequired = true, IsKey = false)]
public string MaxWritePoolSize
{
get
{
return (string)base["MaxWritePoolSize"];
}
set
{
base["MaxWritePoolSize"] = value;
}
}
}
}
上述代码,是意思获取RedisConfig自定义节点下的WriteServerConStr,…特性
配置文件新增自定义配置
<!--type定义 命名空间.类名,类所在的程序集名-->
<configSections>
<section name="RedisConfig" type="TestRedis.RedisConfig,TestRedis"/>
</configSections>
<RedisConfig WriteServerConStr="112233" ReadServerConStr="1111111" MaxWritePoolSize="10"/>
测试下
class Program
{
static void Main(string[] args)
{
var config = RedisConfig.GetConfig();
Console.WriteLine(config.WriteServerConStr);
Console.WriteLine(config.ReadServerConStr);
Console.WriteLine(config.MaxWritePoolSize);
Console.ReadLine();
}
}
多节点key/value实现
继上面的内容,我们将App.Config文件修改
<configSections>
<section name="RedisConfig" type="TestRedis.RedisConfig,TestRedis"/>
<!--分组添加节点-->
<sectionGroup name="MyConfig">
<section name="Default"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<section name="myNameValue"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
<!--分组添加节点-->
</configSections>
<RedisConfig WriteServerConStr="112233" ReadServerConStr="1111111" MaxWritePoolSize="10"/>
<MyConfig>
<Default>
<add key="Area" value="Default-Fuzhou"/>
<add key="Device" value="Default-Printer"/>
<add key="Customer" value="Default-Muf"/>
</Default>
<myNameValue>
<add key="Area" value="myNameValue-Fuzhou"/>
<add key="Device" value="myNameValue-Printer"/>
<add key="Customer" value="myNameValue-Muf"/>
</myNameValue>
</MyConfig>
添加实体类 MyConfig.cs
namespace TestRedis
{
public class MyConfig : NameValueCollection //DictionarySectionHandler SingleTagSectionHandler 实例返回Hashtable,配置文件也需要修改节点type属性
{
//如果继承的是DictionarySectionHandler,SingleTagSectionHandler 这里的 NameValueCollection 用 Hashtable 取代
public static NameValueCollection GetConfig()
{
return GetConfig("MyConfig/Default");
}
//如果继承的是DictionarySectionHandler,SingleTagSectionHandler 这里的 NameValueCollection 用 Hashtable 取代
public static NameValueCollection GetConfig(string sectionname)
{
var config = (NameValueCollection)ConfigurationManager.GetSection(sectionname);
if (config == null)
throw new ConfigurationErrorsException("Not found the section:["+sectionname+"]");
return config;
}
///
}
}
测试下
class Program
{
static void Main(string[] args)
{
//默认取MyConfig/Default节点下的 key/value
var myconfig = MyConfig.GetConfig();
Console.WriteLine(myconfig["Area"]);
//取MyConfig/Default节点下的 key/value
var myconfig1 = MyConfig.GetConfig("MyConfig/myNameValue");
Console.WriteLine(myconfig1["Device"]);
Console.ReadLine();
}
}