我正在Docker(在Kubernetes中)中运行一个.NET Core应用程序,将环境变量传递给Docker容器并在我的应用程序中使用它们。
在我的.NET Core应用程序中,我有以下C#类:
public class EnvironmentConfiguration
{
public string EXAMPLE_SETTING { get; set; }
public string MY_SETTING_2 { get; set; }
}
我将我的appsettings
设置如下:
config.
AddJsonFile("appsettings.json").
AddJsonFile($"appsettings.docker.json", true).
AddEnvironmentVariables();
DI设置:
services.Configure<EnvironmentConfiguration>(Configuration);
而在我的控制器中,我将其用作如下所示:
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/my")]
public class MyController : Controller
{
private readonly IOptions<EnvironmentConfiguration> _environmentConfiguration;
public MyController(IOptions<EnvironmentConfiguration> environmentConfiguration)
{
_environmentConfiguration = environmentConfiguration;
}
}
我运行Docker:
docker run -p 4000:5000 --env-file=myvariables
文件myvariables
的内容如下:
EXAMPLE_SETTING=example!!!
MY_SETTING_2=my-setting-2!!!!
这可以正常工作。我可以使用我的_environmentConfiguration
并查看我的变量是否被设置。
但是... 我想将环境变量与appsettings
合并,以便在找不到环境变量时使用appsettings
中的值作为备用。请问如何合并以下这两行:
services.Configure<EnvironmentConfiguration>(settings => Configuration.GetSection("EnvironmentConfiguration").Bind(settings));
services.Configure<EnvironmentConfiguration>(Configuration);
这是否有可能呢?
我的备选方案是继承EnvironmentConfiguration
类,并使用单独的DI来注入两个不同的配置,然后在代码中“手动”合并它们,但这种解决方案是不可取的。