.net如何自定义config配置文件节点

使用.net配置文件管理配置信息
本文介绍如何在.NET中通过实体类、实体类工厂及配置文件管理配置信息,解决配置混乱和调用不便的问题。

本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html

对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案

1 自己开发一个配置信息持久化类,用来管理配置信息,并提供面向对象的支持
2 使用.net自带的configSections,将配置信息分块管理,并提供实体类,便于开发人员友好的去使用它

本文主要说说第二种方案,它由实体类,实体类工厂及配置文件三个部分,看代码:

实体类设计:

复制代码
namespace Configer
{
    /// <summary>
    /// 网站信息配置节点
    /// </summary>
    public class WebConfigSection : ConfigurationSection
    {
        /// <summary>
        /// 网站名称
        /// </summary>
        [ConfigurationProperty("WebName", DefaultValue = "", IsRequired = true, IsKey = false)]
        public string WebName
        {

            get { return (string)this["WebName"]; }
            set { this["WebName"] = value; }
        }
        /// <summary>
        /// 网站域名
        /// </summary>
        [ConfigurationProperty("DoMain", DefaultValue = "", IsRequired = true, IsKey = false)]
        public string DoMain
        {

            get { return (string)this["DoMain"]; }
            set { this["DoMain"] = value; }
        }

    }
}
复制代码

实体工厂类设计,主要用来生产实体配置信息

复制代码
namespace Configer
{
    /// <summary>
    /// 网站配置信息工厂
    /// </summary>
    public class WebConfigManager
    {
        /// <summary>
        /// 配置信息实体
        /// </summary>
        public static readonly WebConfigSection Instance = GetSection();

        private static WebConfigSection GetSection()
        {
            WebConfigSection config = ConfigurationManager.GetSection("WebConfigSection") as WebConfigSection;
            if (config == null)
                throw new ConfigurationErrorsException();
            return config;
        }
    }
}
复制代码

而最后就是.config文件了,它有configSections和指定的sections块组成,需要注意的是configSections必须位于configuration的第一个位置

复制代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="WebConfigSection" type="Configer.WebConfigSection, test"/>
  </configSections>
  <connectionStrings>
    <add name="backgroundEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\sqlexpress;Initial Catalog=background;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

  <WebConfigSection WebName="占占网站" DoMain="www.zhanzhan.com"  />
  <appSettings>
    <add key="site" value="www.zzl.com"/>

  </appSettings>
</configuration>
复制代码

以上三步实现后,我们就可以调用了,呵呵

  static void Main(string[] args)
   {
     Console.WriteLine(System.Configuration.ConfigurationManager.AppSettings["site"]);
     Console.WriteLine(WebConfigManager.Instance.DoMain);
     Console.WriteLine(WebConfigManager.Instance.WebName);
   }

结果如下:

### .NET读写 Config 文件的方法 在.NET框架中,`app.config` 或 `web.config` 是特殊的配置文件,无法像一般 XML 文件那样简单地通过序列化方式处理。对于这些特定类型的配置文件,有多种方法可以实现其读取和修改操作。 #### 使用 ConfigurationManager 类读取配置项 为了访问应用程序中的设置部分,可利用 `System.Configuration` 命名空间下的 `ConfigurationManager` 类来获取应用级别的配置数据[^1]: ```csharp string appSettingValue = ConfigurationManager.AppSettings["MyAppSettingKey"]; ``` 此代码片段展示了如何从 `<appSettings>` 节点检索键值对形式的应用程序设定。 #### 修改现有配置文件并保存更改 当需要更新现有的配置条目时,则可以通过打开当前执行文件对应的配置实例来进行编辑,并最终调用 Save 方法持久化变更[^2]: ```csharp using System; using System.Configuration; class Program { static void Main(string[] args){ Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // 更新 AppSettings 的某个 key-value 对 string myKeyValue = "New Value"; config.AppSettings.Settings["SomeKey"].Value = myKeyValue; // 将更改后的配置保存回磁盘上的配置文件 config.Save(); Console.WriteLine($"Updated value of SomeKey to '{myKeyValue}'"); } } ``` 上述例子说明了怎样定位到指定的配置节(这里是 `appSettings`),并对其中的内容作出调整;之后再把新的状态存入原始位置。 #### 创建自定义配置节点及其管理 如果项目需求涉及到更复杂的结构化信息存储于配置文件内,那么应该考虑设计自己的配置元素、集合以及相应的处理器类。这通常涉及继承某些基类如 `ConfigurationElement`, `ConfigurationSectionGroup`, 和/或 `ConfigurationSection` 来构建层次化的配置模型[^3]. 下面给出了一段创建自定义配置区段的例子: ```xml <configuration> <configSections> <!-- 定义一个新的 section --> <section name="customConfig" type="CustomConfigSection, MyAssembly"/> </configSections> <!-- 实际使用的 customConfig section --> <customConfig settingName="value"> ... </customConfig> </configuration> ``` 配合 C# 端代码如下所示: ```csharp public class CustomConfigSection : ConfigurationSection{ [ConfigurationProperty("settingName", IsRequired=true)] public string SettingName => (string)this["settingName"]; // 可继续添加更多属性... } // 访问该自定义配置区段 var customConfig = (CustomConfigSection)ConfigurationManager.GetSection("customConfig"); Console.WriteLine(customConfig.SettingName); ``` 这段示范解释了如何注册新类型的配置区块至全局配置表单之中,并且提供了相应 API 接口供后续编程逻辑调用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值