所以这是一个有趣的小东西,我认为Stack Overflow之前没有讨论过。不是生死攸关的问题,而是我想听听你的意见。
简而言之:我的程序在这方面有点过于设计:它从四个不同的地方获取配置选项:
问题是,这些评估的顺序是什么?我认为很明显命令行选项有最后的发言权,但其他三个呢?如果在环境和ini文件中都设置了相同的选项,哪个应该优先?
注册表如何,注册表覆盖ini,假设我使用它来更改程序的运行时设置,我是否应该将应用于注册表的更改重写到配置文件中?我应该设置它以便注册表设置不能覆盖从环境中读取的设置吗?
(如果你想知道这是怎么可能的,一个词:X-macro。)
答案 0 :(得分:2)
按优先级排序,我会这样:cli > envvars > registry > config > defaults
cli
:它具有您在手动启动程序时肯定要使用的选项envvar
:通常用于在运行时手动覆盖配置文件选项(今天通常还用于管理容器环境中的配置选项,请参见12factor app)registry
:特定于Microsoft Windows世界,但根据您所说的,它的作用与环境变量几乎相同config
:在安装/配置时定义,因此它们是“用户所需的默认选项” defaults
:在不提供其他任何内容的情况下,只需最少的配置即可安全地运行(例如仅在本地主机上监听)