.net core 是否有方法将不同命名的环境变量映射到IOOptions<;T>;实现模式?

.net core 是否有方法将不同命名的环境变量映射到IOOptions<;T>;实现模式?,.net-core,.net Core,给定一个使用HostBuilder的.NET核心项目,有并没有办法将特定的环境变量映射到我的选项的属性 假设我的选项类如下所示: class MyOptions { public string MyFirstValue { get; set; } public string MySecondValue { get; set; } } Myappsettings.json文件现在可以包含名为MyFirstValue和MySecondValue(不区分大小写)的值,也可以位于子节中

给定一个使用HostBuilder的.NET核心项目,有并没有办法将特定的环境变量映射到我的选项的属性

假设我的选项类如下所示:

class MyOptions
{
    public string MyFirstValue { get; set; }
    public string MySecondValue { get; set; }
}

My
appsettings.json
文件现在可以包含名为
MyFirstValue
MySecondValue
(不区分大小写)的值,也可以位于子节中。但是,如果可选环境变量可以覆盖这些值,但它们的名称与属性不匹配怎么办?假设第一个值可以被
MY\u SPECIAL\u first\u值覆盖
?有没有办法配置我的建设者来考虑这个问题?

框外,没有办法做到这一点,因为它不支持它。它要求环境变量名有一个模式,其中每个级别由一个双下划线分隔,例如,
SOME\uuuuuu THING\uuuu属性

您可以在环境变量提供程序启动之前的启动点读取自定义环境变量的值并设置适当的下划线变量,或者按照注释中的建议使用委托


另一个选择是编写您自己的提供者,可能是子类化的,但允许自定义环境变量。这显然有点复杂。

我认为您不会找到一种内置的方法来实现这一点,但实现这一点的一个选项是注册一个
Configure
委托,该委托必须相应地重写该值。