是否可以清除.net核心配置中的阵列?

时间:2017-01-30 20:07:10

标签: .net-core azure-webjobs

现在我正在配置一个系统来监视和处理特定队列的内容。我需要配置每个队列处理程序应该与之交互的队列列表,因此我创建了一个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)并为它们创建空值覆盖,但我相信这只会让你无所顾忌。

1 个答案:

答案 0 :(得分:2)

总结评论:

将设置移至appsettings.Development.json。然后,您可以存储生产设置

  1. in appsettings.json
  2. 根本不发布appsettings.json,并使用Azure网络应用中的appsettings:
  3. app settings in web app

    奖励:您可以使用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"));
    }
    

    并在代码中将它们用作列表!

    Settings