本地配置参数

本地参数包含以下形式

  • 环境变量(系统级/用户级/进程级)
  • 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>();