本地配置参数
本地参数包含以下形式
- 环境变量(系统级/用户级/进程级)
- AppConfig(ClownFish.App.config)
查找优先级:
- 环境变量
- AppConfig
环境变量
docker run -d --name xxxx -p 8208:80 -m500m \
-e ASPNETCORE_ENVIRONMENT=TEST \
-e XyzName=abc \
-v /etc/hosts:/etc/hosts \
nebula/venus:latest
上例定义了2个环境变量:
- ASPNETCORE_ENVIRONMENT
- XyzName
获取配置参数
string value = LocalSettings.GetSetting("XyzName");
环境变量文件
为了方便,ClownFish支持使用文件的方式来定义环境变量。
方法是在程序运行目录下创建一个名叫 _local.env 的文件,
文件内容采用 name=value 的格式,一行一个环境变量的定义,例如:
# 这是一个注释行,在读取环境变量时会忽略
ASPNETCORE_ENVIRONMENT=TEST
// 这也是一个注释行
XyzName=abc
注意:这个文件不要纳入源代码管理,避免敏感信息泄露!!!
说明:
- 等号右边的所有内容(不做任何转义处理),都属于 value 部分
- name 不能为空
- value 可以为空
- 文件定义的环境变量仅对ClownFish提供的API有效, 对 .NET BCL/CLR 无效。
ClownFish.App.config 配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="configServiceUrl" value="http://LinuxTest:8503" />
</appSettings>
</configuration>
获取配置参数
string value = LocalSettings.GetSetting("configServiceUrl");
对象化参数值
通常我们说的配置参数是 name = value 这种形式,二边都是字符串。
然而有些场景下,value可能会是一个对象。
例如:以下数据类型,它包含3个成员
public sealed class XxxConfig
{
public int Id { get; set; }
public string Name { get; set; }
public string Key { get; set; }
}
这个时候如果强行把它拆分成3个参数就很不方便了,此时可以将 value部分 写成以下形式:
Id=1111111111;Name=222222222;Key=xxxxxxxxxx
然后可以这样获取:
XxxConfig config = LocalSettings.GetSetting<XxxConfig>("参数名称");
小结:
- 包含多个子项参数,可以将value写成 a=b;c=d 格式
- 本小节介绍的参数值写法对于配置服务也是支持的
注意:
- 如果参数的子项值包含 = ; 这2个特殊字符,可以将value写成 JSON格式
- 如果参数对象是一个多层级的,建议使用【独立配置文件】
自定义配置文件
如果配置参数比较复杂,可以采用XML或者JSON文件方式存储, 使用时反序列化读取。
例如:
string filePath = Path.Combine(AppContext.BaseDirectory, "XxxConfig.xml");
var config = XmlHelper.XmlDeserializeFromFile<T>(filePath);
或者
string filePath = Path.Combine(AppContext.BaseDirectory, "XxxConfig.json");
var config = File.ReadAllText(filePath).FromJson<T>();