C# 中的应用配置
配置功能是软件必要的功能,下面介绍以下 Glacier 内置的配置框架,Glacier 支持三种方式的配置:
- appSettings 配置
- 嵌入的 HOCON 配置
- 独立的 HOCON 配置
优先级:独立的 HOCON 配置 > 嵌入的 HOCON 配置 > appSettings 配置
优先级高的配置会覆盖优先级低的配置
关于 Glacier 框架使用,请前往:https://www.gkarch.com/
1 appSetting 配置
例如在 appSetting 中存在以下配置
- <configuration>
- <appSettings>
- <add key="prefix:key1" value="" />
- <add key="prefix:key2" value="foo,bar" />
- <add key="prefix:key3:innerKey" value="hello world" />
- </appSettings>
- </configuration>
通过 Glacier 框架,可以通过使用如下代码来获取配置(可以直接通过 As.. 转换成具体的类型)
- // 程序启动时,添加需要加载的配置前缀:
- GlacierSystem.Core.AddAppSettingsConfig("prefix");
- // 需要获取配置时:
- var config = GlacierSystem.Core.GetConfig("prefix");
- var val1 = config["key1"].AsInt();
- var val2 = config["key2"].AsList<string>();
- var innerVal = config["key3:innerKey"].AsString();
- // 或
- var innerVal = config.GetSub("key3")["innerKey"].AsString();
2 嵌入的 HOCON 配置
HOCON 方式的配置支持类型绑定功能,可以直接将配置绑定到具体的类,使配置更具可读性,方便使用和管理。
依然利用之前的例子,这次使用嵌入的 HOCON 配置
- <configuration>
- <configSections>
- <section name="glacier"
- type="GKarch.Glacier.Configuration.HoconSection, GKarch.Glacier" />
- </configSections>
- <glacier>
- <![CDATA[
- prefix {
- key1 =
- key2 = [foo, bar]
- key3 = {
- innerKey = "hello world"
- }
- }
- ]]>
- </glacier>
- </configuration>
定义一个类来对应这个配置:
- // 自定义模型
- class MyConfig
- {
- public int Key1 { get; set; }
- public IList<string> Key2 { get; set; }
- public IDictionary<string, string> Key3 { get; set; }
- }
读取配置并绑定到模型
- // 获取配置并绑定到自定义模型
- MyConfig config = GlacierSystem.Core.GetConfig("prefix").Bind<MyConfig>;
3 独立的 HOCON 配置
HOCON 配置可以是独立的配置文件,通过独立的配置文件可以更方便的进行开发环境和生产环境的切换,
首先在 appSetting 中定义配置文件
- <configuration>
- <appSettings>
- <add key="glacier:config:provider" value="hocon" />
- <!-- 默认加载 config.conf 文件,需要使用其他文件名可添加如下配置 -->
- <!-- <add key="glacier:config:hocon:file" value="my.conf" /> -->
- </appSettings>
- </configuration>
config.conf 配置文件内容
- prefix {
- key1 =
- key2 = [foo, bar]
- key3 = {
- innerKey = "hello world"
- }
- }
这次使用一个嵌套的类型来对应配置,定义如下两个类来对应配置
- class MyConfig
- {
- public int Key1 { get; set; }
- public IList<string> Key2 { get; set; }
- public MyInnerConfig Key3 { get; set; }
- }
- class MyInnerConfig
- {
- public string InnerKey { get; set; }
- }
读取配置
- var config = GlacierSystem.Core.GetConfig("prefix").Bind<MyConfig>();
- Console.WriteLine(config.Key3.InnerKey); // hello world
C# 中的应用配置的更多相关文章
- WCF学习之旅—WCF4.0中的简化配置功能(十五)
六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...
- asp.net中web.config配置节点大全详解
最近网上找了一些关于Web.config配置节点的文章,发现很多都写的都比较零散,而且很少有说明各个配置节点的作用和用法.搜索了一下发现有一篇写的不错,这里引用一下 原文地址 http://www.c ...
- CentOS-7.0.中安装与配置Tomcat-7的方法
安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:http://tomcat.apache.org/down ...
- 在Web.config或App.config中的添加自定义配置
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍 ...
- IIS7错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......
不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny")...... 解决方案: 因为 II ...
- 深入理解php中的ini配置(1)
这篇文章不会详细叙述某个ini配置项的用途,这些在手册上已经讲解的面面俱到.我只是想从某个特定的角度去挖掘php的实现机制,会涉及到一些php内核方面的知识:-) 使用php的同学都知道php.ini ...
- IIS关于“ 配置错误 不能在此路径中使用此配置节”的解决办法
IIS关于“ 配置错误 不能在此路径中使用此配置节”的解决办法 原文链接:http://www.cnblogs.com/200325074/p/3679316.html 今天刚安装好IIS8.5, 我 ...
- [转]通过继承ConfigurationSection,在web.config中增加自定义配置
本文转自:http://www.blue1000.com/bkhtml/2008-02/55810.htm 前几天写了一篇使用IConfigurationSectionHandler在web.conf ...
- Win7旗舰版中的IIS配置asp.net的运行环境
Win7旗舰版中的IIS配置asp.net的运行环境 以前弄过好多次,都没有成功,昨天晚上不知怎么地就成功了,借用我同学的一句话,这叫“灵光一闪”,废话不多说了,这个成功是有图有视频有真相地哈! ...
- 安装SQLServer2005错误无法在com+目录中安装和配置程序集
无法在com+目录中安装和配置程序集c:\program files\Microsoft SQL Server\90\DTS\tasks\microsoft.sqlserver.MSMQTASK.DL ...
随机推荐
- codeforces 555c// Case of Chocolate// Codeforces Round #310(Div. 1)
题意:直角边为n的网格巧克力,一格为一块,选择斜边上一点,从左或上吃,直到吃到空气,称为一次操作.给出几个操作,问各能吃几块.如果x是当前要吃的横坐标,在已经吃过的中找x1>=x的第一个x1,即 ...
- Java 源代码和 C 源代码的运行区别
与其他程序的执行方式和编译方式不同. Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性. 请参考下图. https://www.cwi ...
- Jersey 2.x 探索新建的工程
如果用 Jersey maven archetype 成功创建了这个项目,那么在你当前的路径下就已经创建了一个名为simple-service项目.它包含了一个标准的Maven项目结构: 说明 文件目 ...
- Confluence 6 获得 Active Directory 服务器证书
上面的步骤说明了如何在你的 Microsoft Active Directory服务器上安装 certification authority (CA).这一步,你需要为你的 Microsoft Act ...
- 41 MYSQL 索引和慢查询优化
一 .索引mysql 索引 b+tree 本质:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数 ...
- pandas的concat函数和append方法
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, nam ...
- Cron\CronExpression::setPart("24")
利用laravle实现定时器的功能的时候,报错说:Cron\CronExpression::setPart("24"). 后来发现是时间设置的问题,他不能设置("24:0 ...
- Dubbo 环境搭建
CentOS7 x64 JDK1.8 1. wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.8/zoo ...
- PHP header函数设置http报文头示例详解
//定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...
- Idea检入boss项目
Idea检入boss项目