一步一步教你玩转NET Framework的配置文件appconfig.docx
- 文档编号:5091875
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:18.69KB
一步一步教你玩转NET Framework的配置文件appconfig.docx
《一步一步教你玩转NET Framework的配置文件appconfig.docx》由会员分享,可在线阅读,更多相关《一步一步教你玩转NET Framework的配置文件appconfig.docx(13页珍藏版)》请在冰豆网上搜索。
一步一步教你玩转NETFramework的配置文件appconfig
一步一步教你玩转.NETFramework的配置文件app.config
在一般的项目中,为了使你的代码更加灵活,更方便调整,减少不必要的hardcode,我们都在config中添加许多配置信息,一般可以选择.NET自带的配置文件形式app.config或者web项目中的web.config来完成配置工作。
.NET中提供了几个和配置有关的类来支持用完轻松的完成配置文件的读写设置:
System.Configuration.ConfigurationSectionGroup
一般和你项目中使用的Assambly保持1:
1的对应关系,这样划分使得结构相对清晰,权责明确。
当然你可以不使用它,这样一旦你的Assambly在别的地方要被重用时,找出相应的config信息就变得很困难。
System.Configuration.ConfigurationSection
维护一个相对独立的配置节,使用时需现在
我们熟悉的
System.Configuration.ConfigurationElementCollection&System.Configuration.ConfigurationElement
就是Section下具体的配置信息和配置信息的集合了。
下面来看看怎么使用这些类玩转app.config
1.初级玩法
最初级的用法当然是使用
访问它
publicclassAppSettingConfig
{
publicstringresultValue;
publicAppSettingConfig()
{
this.resultValue=ConfigurationManager.AppSettings["MyConfigString"].ToString();
}
}
[TestMethod]
publicvoidTestAppSettingConfigNode()
{
AppSettingConfigappCon=newAppSettingConfig();
Assert.AreEqual("TestConfigData",appCon.resultValue);
}
没有问题!
我们加个Section来看看如何访问:
注意我们在section的type中给出了System.Configuration.DictionarySectionHandler,这也限制了我们在具体的ConfigurationElement中只能使用
publicclassSectionConfig
{
publicstringresultValue;
publicSectionConfig()
{
System.Configuration.Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
IDictionarydic=ConfigurationManager.GetSection("MySectionGroup/MySecondSection")asIDictionary;
this.resultValue=dic["Second"].ToString();
}
}
[TestMethod]
publicvoidTestSectionGroupConfigNode()
{
SectionConfigsc=newSectionConfig();
Assert.AreEqual("FirstSection",sc.resultValue);
}
还是没问题。
2.中级玩法
.NET支持对上述提到的configuration类进行扩展,我们可以定义自己的Section。
继承自基类System.Configuration.ConfigurationSection,ConfigurationSection已经提供了索引器用来获取设置数据。
在类中加上ConfigurationProperty属性来定义Section中的Element:
publicclassCustomSection:
System.Configuration.ConfigurationSection
{
[ConfigurationProperty("sectionId",IsRequired=true,IsKey=true)]
publicintSectionId{
get{return(int)base["sectionId"];}
set{base["sectionId"]=value;}
}
[ConfigurationProperty("sectionValue",IsRequired=false)]
publicstringSectionValue{
get{returnbase["sectionValue"].ToString();}
set{base["sectionValue"]=value;}
}
}
操作此Section,我们将其动态加入app.config中,并读出来:
publicclassCustomSectionBroker
{
privateCustomSectioncustomSection=null;
publicvoidInsertCustomSection()
{
customSection=newCustomSection();
customSection.SectionId=1;
customSection.SectionValue="TheFirstValue";
System.Configuration.Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.Sections.Add("CustomSection",customSection);
config.Save(ConfigurationSaveMode.Minimal);
}
publicintGetCustomSectionID()
{
System.Configuration.Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
CustomSectioncs=config.GetSection("CustomSection")asCustomSection;
returncs.SectionId;
}
}
[TestMethod]
publicvoidTestCustomSection()
{
CustomSectionBrokercb=newCustomSectionBroker();
cb.InsertCustomSection();
Assert.AreEqual(1,cb.GetCustomSectionID());
}
可以看下现在app.config文件的变化:
增加了一个单独的Section,名为"CustomSection",并且包含了我们创建的2个configurationProperty。
我们还可以继续作扩展,现在我们的config中section的部分呈现的是
这种方式呢?
我们为
由于ChildCustomSectionA和ChildCustomSectionB的结构相对一致,根据面向对象的开发封闭原则,我们可以先抽象出一个base类,然后让ChildCustomSectionA,ChildCustomSectionB分别继承自此base类,当以后要添加更多的ChildCustomSectionC,ChildCustomSectionD…时,使用这种Template的设计模式,将更加灵活。
publicabstractclassCustomSectionElementBase:
System.Configuration.ConfigurationElement
{
[ConfigurationProperty("childId",IsRequired=true,IsKey=true)]
publicintChildID
{
get{return(int)base["childId"];}
set{base["childId"]=value;}
}
[ConfigurationProperty("childValue",IsRequired=true)]
publicstringChildValue
{
get{returnbase["childValue"].ToString();}
set{base["childValue"]=value;}
}
}
publicclassCustomSectionElementA:
CustomSectionElementBase
{
publicCustomSectionElementA()
{
base.ChildID=1;
base.ChildValue="ChildA";
}
}
publicclassCustomSectionElementB:
CustomSectionElementBase
{
publicCustomSectionElementB()
{
base.ChildID=2;
base.ChildValue="ChildB";
}
}
完成了ConfigurationElement的实现,我们可以改写我们上一个例子中定义的CustomSection类了:
publicclassCustomSectionWithChildElement:
System.Configuration.ConfigurationSection
{
privateconststringelementChildA="childSectionA";
privateconststringelementChildB="childSectionB";
[ConfigurationProperty(elementChildA,IsRequired=true,IsKey=true)]
publicCustomSectionElementAChildSectionA{
get{returnbase[elementChildA]asCustomSectionElementA;}
set{base[elementChildA]=value;}
}
[ConfigurationProperty(elementChildB,IsRequired=true)]
publicCustomSectionElementBChildSectionB{
get{returnbase[elementChildB]asCustomSectionElementB;}
set{base[elementChildB]=value;}
}
}
publicclassCustomSectionWithChildElementBroker
{
privateCustomSectionWithChildElementcustomSection=null;
publicvoidInsertCustomSection()
{
customSection=newCustomSectionWithChildElement();
customSection.ChildSectionA=newCustomSectionElementA();
customSection.ChildSectionB=newCustomSectionElementB();
System.Configuration.Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.Sections.Add("CustomSectionWithChildElement",customSection);
config.Save(ConfigurationSaveMode.Minimal);
}
publicintGetCustomSectionChildAID()
{
System.Configuration.Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
CustomSectionWithChildElementcswe=config.GetSection("CustomSectionWithChildElement")asCustomSectionWithChildElement;
returncswe.ChildSectionA.ChildID;
}
}
红色字体就是修改的地方了,将Property改成我们自定义类的形式.测试代码如下:
[TestMethod]
publicvoidTestCustomSectionWithChildElement()
{
CustomSectionWithChildElementBrokercweb=newCustomSectionWithChildElementBroker();
cweb.InsertCustomSection();
Assert.AreEqual(1,cweb.GetCustomSectionChildAID());
}
看看运行后我们的app.config变成什么样子了:
cool,好像完成了我们的要求。
下面为我们的CustomSectionWithChildElement外面再加一层SectionGroup.
publicclassCustomSectionGroup:
System.Configuration.ConfigurationSectionGroup
{
[ConfigurationProperty("customSectionA",IsRequired=true,IsKey=true)]
publicCustomSectionWithChildElementSectionA
{
get{returnbase.Sections["customSectionA"]asCustomSectionWithChildElement;}
set
{
this.Sections.Add("customSectionA",value);
}
}
}
p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一步一步教你玩转NET Framework的配置文件appconfig 一步一步 NET Framework 配置文件 appconfig