c# 配置文件中自定义块节点

在.netcore中我们非常方便获取配置文件节点参数,但是在非.netcore下一般 我们是使用中方法。

xml 复制代码
  <appSettings>
         <add key="BranchCode" value="FS"/>
  </appSettings>

读取方式也非常简单直接

C# 复制代码
   private string _defaultBranchCode = ConfigurationManager.AppSettings["BranchCode"].ToString();//运营中心

但是如果有很多参数,这样写感觉不够美观,以及容易遗漏。能否自定义一个块节点呢? 答案是肯定了。

就这样

xml 复制代码
  <pdd>
    <!--基础域名-->
    <add key="base_uri" value="xxxxxx"/>
    <!--测试环境-->
    <!--拼多多开放平台分配给服务商应用的唯一标示-->
    <add key="target_client_id" value="xxxxxxx"/>
    <!-- 调用拼多多开放平台 client_id-->
    <add key="client_id" value="xxxxxxx"/>
    <!--调用拼多多开放平台 秘钥-->
    <add key="client_secret" value="xxxxxxxxf"/>
  </pdd>
 <configSections>
    <section name="pdd" type="System.Configuration.NameValueSectionHandler"/>
   </configSections>    

对应读取

c# 复制代码
  public class pddConfig : IPddConfig
    {
        private string _base_uri;
        private string _target_client_id;
        private string _client_id;
        private string _client_secret;
        public pddConfig()
        {
            try
            {
                var pddConfig = ConfigurationManager.GetSection("pdd") as NameValueCollection;
                _base_uri = pddConfig["base_uri"];
                _target_client_id = pddConfig["target_client_id"];
                _client_id = pddConfig["client_id"];
                _client_secret = pddConfig["client_secret"];

            }
            catch (Exception ex)
            {
                throw new Exception("PDD配置错误, 请检查配置文件", ex);
            }
        }

        public string base_uri { get { return _base_uri; } }
        public string target_client_id { get { return _target_client_id; } }
        public string client_id { get { return _client_id; } }
        public string client_secret { get { return _client_secret; } }
 
    }
    
     public interface IPddConfig
    {
        string base_uri { get; }
        string target_client_id { get; }
        string client_id { get; }
        string client_secret { get; }

    }

调用 。这里使用了注入,所以可以通过构造函数获取

C# 复制代码
  builder.RegisterType<pddConfig>().As<IPddConfig>().InstancePerRequest();
  builder.RegisterType<PddService>().As<IPddService>().InstancePerRequest();
C# 复制代码
    public interface IPddService
    {
    }
    
    public class PddService : IPddService
    {
        public static string base_uri;
        public static string target_client_id;
        public static string client_id;
        public static string client_secret;
        public readonly IPddConfig _pddConfig;
        
       public PddService(IPddConfig PddConfig)
        {
            _pddConfig = PddConfig;
            GetConfig();
        }
        public void GetConfig()
        {
            base_uri = _pddConfig.base_uri;
            target_client_id = _pddConfig.target_client_id;
            client_id = _pddConfig.client_id;
            client_secret = _pddConfig.client_secret;
        }
    }

有关System.Configuration.NameValueSectionHandler 理解 gpt平台回答

System.Configuration.NameValueSectionHandler 是 .NET Framework 中的一个类,用于解析配置文件中的 Name-Value(键值对)形式的节(section)。

在应用程序或组件的配置文件(通常是 app.config 或 web.config)中,可以定义自定义的配置节来存储特定的设置。NameValueSectionHandler 可以帮助解析这样的配置节,使其信息可供应用程序使用。

NameValueSectionHandler 遵循配置节处理程序(Section Handler)的标准规范,它提供了解析配置节并返回键值对的功能,其中键和值都是字符串类型。通过使用 NameValueSectionHandler,可以方便地读取和解析配置文件中的特定配置节,并将其作为键值对的集合在应用程序中使用。

要使用 NameValueSectionHandler,需要在配置文件中定义一个自定义节,并指定 type 属性为 System.Configuration.NameValueSectionHandler。例如,在 app.config 文件中定义如下的配置:

xml 复制代码
<configuration>
  <configSections>
    <section name="MyCustomSection" type="System.Configuration.NameValueSectionHandler" />
  </configSections>

  <MyCustomSection>
    <add key="Key1" value="Value1" />
    <add key="Key2" value="Value2" />
  </MyCustomSection>
</configuration>

然后,可以通过以下方式在代码中读取和解析配置节:

C# 复制代码
NameValueCollection mySection = ConfigurationManager.GetSection("MyCustomSection") as NameValueCollection;
string value1 = mySection["Key1"];
string value2 = mySection["Key2"];

上述代码通过 ConfigurationManager.GetSection 方法获取指定名称的配置节,并将其转换为 NameValueCollection 对象。然后,通过键(Key)来获取相应的值(Value)。

需要注意的是,System.Configuration.NameValueSectionHandler 在 .NET Framework 4.0 及更高版本中已经被废弃,推荐使用更现代化的配置方式,例如使用自定义配置节和自定义配置节处理程序(Section Handler)来替代。

相关推荐
Victor35641 分钟前
Redis(25)Redis的RDB持久化的优点和缺点是什么?
后端
Victor35642 分钟前
Redis(24)如何配置Redis的持久化?
后端
ningqw8 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友8 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh8 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫9 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong9 小时前
技术人如何对客做好沟通(上篇)
后端
颜如玉10 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment10 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
why技术11 小时前
在我眼里,这就是天才般的算法!
后端·面试