是否可以清除 .net 核心配置中的数组?
Is it possible to clear an array in .net core configurations?
现在我正在配置一个系统来监视和处理特定队列。我需要配置每个队列处理程序应与之交互的队列列表,因此我制作了一个 appsettings.json
文件,如下所示:
{
"AppSettings": {
"Queues": [
{
"Name": "First",
"Type": "Type1"
} ]
}
}
我在开发时将要处理的队列将不同于机器 X 将要处理的队列,这将不同于机器 Y 将要处理的队列。
现在我正在 Azure 上将该系统部署为 Webjobs,并使用 Azure 本身的应用程序设置面板通过环境变量覆盖应用程序的设置。
但是,这会破坏数组。目前我正在使用 AppSettings:Queues:0:xxxxx
语法覆盖并且工作正常。我什至可以通过更改该语法中的索引,通过环境变量将其他条目添加到列表中。
问题是在开发过程中我向本地 appsettings.json
文件添加了一个额外的队列条目以测试一些新功能。部署后,即使没有设置 AppSettings:Queues:1:xxxxx
环境变量,它仍然使用部署的 appsettings.json
文件中的第二个条目。
有什么方法可以告诉重写我想要一个干净的数组吗?这会造成不确定性,因为我们无法确保开发人员不会添加测试条目,这会导致非测试环境做不正确的事情。这将导致我们无法部署 appsettings.json
,这意味着我们无法在所有安装中部署和管理合理的默认设置。
唯一的解决方法是想出一个任意数字(例如 10)并为它们创建空覆盖,但我相信这只是在解决问题。
总结评论:
将设置移动到 appsettings.Development.json
。然后您可以存储生产设置
- 在appsettings.json
- 根本不发布 appsettings.json,而是使用 Azure 网络应用程序中的应用程序设置:
奖励:您可以使用 IOptions feature 而不是使用 AppSettings:Queues:0:xxxxx
:为您的设置创建 POCO:
public class Settings
{
public List<Queue> Queues { get; set; }
}
public class Queue
{
public string Name { get; set; }
public string Type { get; set; }
}
将它们注入您的 Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Settings>(Configuration.GetSection("AppSettings"));
}
并在您的代码中将它们用作列表!
现在我正在配置一个系统来监视和处理特定队列。我需要配置每个队列处理程序应与之交互的队列列表,因此我制作了一个 appsettings.json
文件,如下所示:
{
"AppSettings": {
"Queues": [
{
"Name": "First",
"Type": "Type1"
} ]
}
}
我在开发时将要处理的队列将不同于机器 X 将要处理的队列,这将不同于机器 Y 将要处理的队列。
现在我正在 Azure 上将该系统部署为 Webjobs,并使用 Azure 本身的应用程序设置面板通过环境变量覆盖应用程序的设置。
但是,这会破坏数组。目前我正在使用 AppSettings:Queues:0:xxxxx
语法覆盖并且工作正常。我什至可以通过更改该语法中的索引,通过环境变量将其他条目添加到列表中。
问题是在开发过程中我向本地 appsettings.json
文件添加了一个额外的队列条目以测试一些新功能。部署后,即使没有设置 AppSettings:Queues:1:xxxxx
环境变量,它仍然使用部署的 appsettings.json
文件中的第二个条目。
有什么方法可以告诉重写我想要一个干净的数组吗?这会造成不确定性,因为我们无法确保开发人员不会添加测试条目,这会导致非测试环境做不正确的事情。这将导致我们无法部署 appsettings.json
,这意味着我们无法在所有安装中部署和管理合理的默认设置。
唯一的解决方法是想出一个任意数字(例如 10)并为它们创建空覆盖,但我相信这只是在解决问题。
总结评论:
将设置移动到 appsettings.Development.json
。然后您可以存储生产设置
- 在appsettings.json
- 根本不发布 appsettings.json,而是使用 Azure 网络应用程序中的应用程序设置:
奖励:您可以使用 IOptions feature 而不是使用 AppSettings:Queues:0:xxxxx
:为您的设置创建 POCO:
public class Settings
{
public List<Queue> Queues { get; set; }
}
public class Queue
{
public string Name { get; set; }
public string Type { get; set; }
}
将它们注入您的 Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Settings>(Configuration.GetSection("AppSettings"));
}
并在您的代码中将它们用作列表!