`
isiqi
  • 浏览: 16332907 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

在.NET框架下使用自定义配置设置(转)

阅读更多

.NET框架通过基于XML的配置使配置设置驾轻就熟。它同时还提供了必要的方法,通过集合类(Collection classes)访问这些设置。

通过一个静态的ConfigurationSettings类可访问实际的配置数据。该类还提供了一个GetConfig()方法,可向一个合适的集合返回一个对象。本文中,我将示范三种可用来访问和存储配置信息的方法。

应用配置数据存储在App.config文件,并由configSections节点定义。每一section都有一个type属性定义。这里我将讨论的3个类型为NameValueSectionHandler、SingleTagSectionHandler和DictionarySectionHandler。你可以用一个sectionGroup元素定义节组。以下是一个配置节定义的例子:

<section name="MyCustomSection"
type="System.Configuration.NameValueSectionHandler"/>

建议使用type="System.Configuration.NameValueSectionHandler,System,Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"

节组是嵌入一个sectionGroup元素的独立配置节。以下是一个节组的例子:

<sectionGroup name="CustomGroup">
<section name="Custom1"
type="System.Configuration.NameValueSectionHandler"/>
<section name="Custom2" type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>

最后,你所指定的配置节将用于构造存储配置数据的自定义的XML节点。若要向配置节添加数据,只要将该配置节作为一个XML节点包含进去,并用add节点添加Collection数据。下例为一个NameValueSectionHandler配置节:

<MyCustomSection>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</MyCustomSection>

MyCustomSection程序段包含一个命名值集合,其两个入口由key1和key2定义。

SingleTagSectionHandler较容易构造。正如NameValueSectionHandler,配置节可在configSections节点中找到。但在SingleTagSectionHandlers和NameValueSectionHandlers中,配置数据的添加方式是不同的,如下所示:

. . .
<section name="MySingleTagSection"
type="System.Configuration.SingleTagSectionHandler"/>
. . .
<MySingleTagSection setting1="value1" setting2="value2" setting3="value3"/>
. . .

DictionarySectionHandler与NameValueSectionHandler相似,但前者返回hashtable,后者返回NameValueCollection。当访问大量配置值时,hashtable要快于NameValueCollectio。DictionarySectionHandler与NameValueSectionHandler的构造方式相同,如下例:

. . .
<section name="MyDictionarySection"
type="System.Configuration.DictionarySectionHandler"/>
. . .
<MyDictionarySection>
<add key="key1" value="value1"/>
</MyDictionarySection>
. . .

我自己用了一下,报错。。原因还挺特别

System.Configuration.DictionarySectionHandler,System,Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089

没有办法把type改为以上那段。终于行了。

构造节组的方法与构造单独配置节的方法基本相同,唯一的不同在于前者的自定义节点互相嵌套。借用前面的节组定义,以下是对节组的实现:

<CustomGroup>
<Custom1>
<add key="key1" value="value1"/>
</Custom1>
<Custom2>
<add key="key1" value="value1"/>
</Custom2>
</CustomGroup>

通过System.Configuration.ConfigurationSettings命名空间的GetConfig()方法和自定义配置节的串值来访问应用配置设置,然后将该方法的结果转为合适的类型。

对于SingleTagSectionHandler,将结果转为System.Collections命名空间的IDictionary接口类型。对于NameValueSectionHandler,结果转为在System.Collections.Specialized命名空间中定义的NameValueCollection类型。最后,对于DictionarySectionHandler,结果转为System.Collections命名空间中的Hashtable类型。

对于节组,唯一的区别是,将加上正斜杠和配置节名的节组名作为字符串参数传递给GetConfig()方法,以访问自定义设置。

以下是一个使用这些自定义设置的实例:

System.Collections.IDictionary stsh = (System.Collections.IDictionary)
System.Configuration.ConfigurationSettings.GetConfig("MySingleTagSection");
System.Collections.Specialized.NameValueCollection nvsh =
(System.Collections.Specialized.NameValueCollection)
System.Configuration.ConfigurationSettings.GetConfig("MyNameValueSection");
System.Collections.Hashtable dsh = (System.Collections.Hashtable)
System.Configuration.ConfigurationSettings.GetConfig("MyDictionarySection");
System.Collections.Specialized.NameValueCollection sgnvsh =
(System.Collections.Specialized.NameValueCollection)
System.Configuration.ConfigurationSettings.GetConfig("MySectionGroup/MySection
1");
System.Diagnostics.Debug.WriteLine((string)stsh["sample1"]);
System.Diagnostics.Debug.WriteLine((string)nvsh["key1"]);
System.Diagnostics.Debug.WriteLine((string)dsh["key1"]);
System.Diagnostics.Debug.WriteLine((string)sgnvsh["key1"]);

以下是用于上面代码的一段配置XML代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MySingleTagSection"
type="System.Configuration.SingleTagSectionHandler"/>
<section name="MyDictionarySection"
type="System.Configuration.DictionarySectionHandler"/>
<section name="MyNameValueSection"
type="System.Configuration.NameValueSectionHandler"/>
<sectionGroup name="MySectionGroup">
<section name="MySection1"
type="System.Configuration.NameValueSectionHandler"/>
<section name="MySection2"
type="System.Configuration.NameValueSectionHandler"/>
</sectionGroup>
</configSections>
<MySingleTagSection sample1="value1" sample2="value2" sample3="value3"/>
<MyDictionarySection>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</MyDictionarySection>
<MyNameValueSection>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</MyNameValueSection>
<MySectionGroup>
<MySection1>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</MySection1>
<MySection2>
<add key="key1" value="value1"/>
<add key="key2" value="value2"/>
</MySection2>
</MySectionGroup>
</configuration>

欲知更多信息,请访问MSDN Library中的application configuration settings和configuration schema。

如何设置.net程序中配置文件的路径。
在开发.net程序时,经常会用到配置文件,应用程序的配置文件一般是MyApp.exe.config的形式,放在MyApp.exe的同级目录,但每次生成MyApp项目时,vs.net会自动删除MyApp.exe的同级目录下的MyApp.exe.config,这样调试程序时很不方便。能不能指定其他目录下的配置文件呢?
可以的,调用下面的方法即可。
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE","D:\\OtherDir\\MyApp.exe.config");


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=557220

分享到:
评论

相关推荐

    在IIS与.net框架中配置中把扩展名.aspx改成自定义的扩展名.mspx

    如果一切正常,那么恭喜你,已经成功地在IIS与.NET框架中配置了自定义的扩展名.mspx。 通过以上详细的步骤,我们不仅学习了如何在IIS和.NET框架中更改默认的ASP.NET页面扩展名,还深入了解了IIS处理HTTP请求的机制...

    在.NET 6.0上使用Kestrel配置和自定义HTTPS.doc

    在 ASP.NET Core 3.0 及更高版本,Kestrel 属于框架默认的配置,当然我们可以进行自定义配置。我们可以通过重写默认的 WebHostBuilder 来设置 Kestrel。 四、Kestrel 配置步骤 我们可以通过以下步骤来配置 Kestrel...

    Asp.net Core中实现自定义身份认证的示例代码

    在了解如何在*** Core中实现自定义身份认证之前,我们需要先理解*** Core中的身份认证机制。身份认证是验证用户身份的过程,*** Core提供了一套完整的身份认证系统,允许开发者自定义身份认证过程以满足不同场景的...

    Ibatis .net框架多数据源配置

    Ibatis .net框架多数据源配置是针对在同一个应用程序中需要连接并操作多个数据库场景的一种解决方案。Ibatis是一个流行的持久层框架,它允许开发者将SQL语句与Java或.NET代码解耦,提供了一种灵活的方式来处理数据库...

    .NET自定义配置节

    在.NET框架中,配置文件是应用设置的重要存储方式,它们通常包括`app.config`(桌面应用程序)和`web.config`(Web应用程序)。`.NET自定义配置节`是为了解决默认配置节无法满足特定需求时的问题,允许开发者创建...

    ASP.NET MVC 模版切换 自定义 模板路径

    这些模板通常位于项目的`~/Views/Shared`目录下,但也可以根据项目需求进行自定义配置。 自定义模板路径意味着我们可以指定模板文件存储在非默认位置。这样做有以下好处: 1. **代码组织**:可以将相关的模板文件...

    .NET Core使用自定义服务(依赖注入方式) 适合新手入门

    本文将深入探讨如何在.NET Core中使用依赖注入来创建和使用自定义服务,特别适合初学者入门。 首先,让我们理解什么是依赖注入。依赖注入是一种设计模式,它允许我们在不直接创建对象的情况下传递依赖。这通常是...

    .Net自定义配置文件的操作

    总结,.NET自定义配置文件的操作主要涉及创建XML文件、定义配置节类、注册配置节以及在代码中读取和使用配置。这种方法提供了一种灵活的方式来管理应用程序的配置,允许开发者根据需求自由扩展配置选项。

    Spring.NET框架参考文档_中文版

    10. **IoC容器扩展**:Spring.NET框架设计为高度可扩展,允许开发者自定义容器的行为,通过编写自定义的生命周期策略、类型解析器或对象工厂等。 通过《Spring.NET框架参考文档》中文版.chm文件,你可以深入学习并...

    .net 简单翻页自定义控件

    在.NET框架中,服务端控件是在服务器端运行并处理的控件,它们在HTML页面上生成相应的标记,并且在回发时能够保持状态。在这个项目中,开发者将JavaScript的分页功能进行了服务端的封装,这意味着用户不再需要在...

    ASP.NET自定义表达式构造器

    在.NET框架中,表达式树是表示代码的类结构,它们可以被分析、修改并转换为其他形式的代码。这在很多场景下非常有用,比如ORM(对象关系映射)工具如Entity Framework在生成SQL查询时就广泛使用了表达式树。 **...

    asp.net自定义列源码

    ASP.NET是一种基于微软.NET框架的Web应用程序开发平台,它提供了丰富的功能和工具,使得开发者能够构建动态、数据驱动的Web应用程序。在这个“asp.net自定义列源码”中,我们可以推测作者张亚东通过VB(Visual Basic...

    NET框架类在ASP.NET中的使用

    本文将深入探讨.NET框架类在ASP.NET中的使用,包括它们如何协同工作,以及这些类如何帮助开发者创建高效、可维护的Web应用。 1. ASP.NET生命周期管理: ASP.NET页面生命周期涉及一系列事件,如初始化、加载、验证...

    自个封装的Ado.net框架版本4

    标题中的“自个封装的Ado.net框架版本4”指的是一个开发者个人创建的Ado.net框架,这个框架是在Microsoft的Ado.net基础之上进行了高级封装,以提高开发效率和代码可读性。Ado.net是.NET框架中用于访问关系数据库的...

    北大青鸟accp5.0 S2 在.NET框架下开发三层结构数据库应用系统

    在北大青鸟的ACCP5.0 S2课程中,学员们将深入学习如何在.NET框架下构建三层结构的数据库应用系统。这一阶段的学习重点在于理解并实践C#编程语言和.NET框架的核心概念,以便创建高效、可维护的软件解决方案。 三层...

    FckEditor在.net中的使用及配置

    在.NET框架下集成FckEditor,可以极大地提升用户在Web应用中的编辑体验。下面将详细介绍FckEditor在.NET中的使用步骤和配置方法。 一、安装FckEditor 首先,你需要从FckEditor的官方网站或者通过NuGet包管理器下载...

    .Net配置文件常用配置说明

    .Net框架中的配置文件是应用程序运行时获取和设置配置信息的关键组件。这些文件通常以XML格式编写,用于存储和管理各种设置,如连接字符串、应用程序设置、自定义配置段等。以下是对配置文件中常见元素和使用的详细...

    .net 自定义控件

    在.NET框架中,自定义控件是开发人员为了满足特定需求而创建的用户界面元素。它们扩展了.NET Framework的基础控件集,提供了更多的功能、样式和行为。自定义控件可以是简单的小型控件,如自定义按钮,也可以是复杂的...

    Spring.NET框架参考文档.

    参考文档《Spring.NET框架参考文档.chm》是学习和使用Spring.NET的重要资源,通常包含以下部分: 1. **介绍**:简述Spring.NET的背景、目标以及如何在项目中引入和配置该框架。 2. **快速入门**:为初学者提供一个...

    Autofac在.net mvc下的配置和使用.rar

    Autofac是一个流行的依赖注入(DI)容器,在.NET框架中被广泛应用,特别是在ASP.NET MVC项目中。依赖注入是一种设计模式,它允许我们解耦代码,提高可测试性和可维护性。Autofac作为DI框架,负责管理和提供应用程序...

Global site tag (gtag.js) - Google Analytics