繁体   English   中英

appsetting.json 中的变量如何与实际值交换?

[英]how does a variable in appsetting.json get swapped with actual value?

在一些 asp.net 核心项目中,我经常在 appsetting.json 文件中看到类似这样的内容:

{
   "Logging": {
      "LogLevel": {
        "Default": "Warning"
      }
   },
   "UserName" : "${userName}"
}

${userName}看起来像一个可以被 docker/k8s 等交换的变量模板,但它是如何工作的,因为在应用程序内部,我仍然访问 UserName 为:

var userName = _configuration["UserName"];  // output is "${userName}"

那么 docker 是否更改了变量模板? 它是否直接更新appsetting.json文件,例如docker将使用dockerfile中的ENV值扫描appsetting.json文件并将${userName}替换为实际值?

这看起来像是针对 appsettings.json 中的“用户名”键存储的内插字符串。

您将依赖代码(C# 等)在运行时替换用户名值,而不是与容器运行时有任何关系。

当通过各种替代方案(Docker、Docker Compose、Kube.netes 等)实例化容器时,您将在创建容器时传入环境变量(在 K8s 的情况下是 pod)。

这(环境变量的注入)是如何完成的取决于你如何启动你的容器。 想法是一样的,但语法可能会有所不同,具体取决于您使用的是“docker run”、“docker compose”还是“kube.netes”等。但原理是一样的。

在 .NET 核心容器的情况下,您将依赖“优先顺序”来导出 ConfigurationManager 的值,例如https://devblogs.microsoft.com/premier-developer/order-of-precedence-when -配置-asp.net-核心/

容器不会修改/注入/交换已部署容器中的底层代码库。

但是,它们可以在实例化时将环境变量注入到容器/pod 中。

不确定我是否正确解释了您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM