现在我正在配置一个系统来监视特定队列并对其进行操作。我需要配置每个队列处理程序应与之交互的队列列表,因此我创建了一个 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 Web 应用中使用 appsettings:
奖励:您可以使用 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; }
}
将它们注入(inject)您的 Startup.cs 中:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Settings>(Configuration.GetSection("AppSettings"));
}
并在代码中将它们用作列表!
关于.net-core - 是否可以清除 .net core 配置中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944516/