2017-01-30 22 views
1

現在我正在配置一個系統來監視和做特定隊列的東西。我需要配置隊列每個隊列處理程序應該與互動的名單,所以我做一個appsettings.json文件看起來像:是否可以在.net內核配置中清除數組?

{ 
    "AppSettings": { 
     "Queues": [ 
      { 
       "Name": "First", 
       "Type": "Type1" 
      }   ] 
    } 
} 

的隊列,同時發展將不同於隊列機X將是我將處理處理,這將與Y將要處理的隊列機器不同。

現在,我將這個系統作爲Webjobs部署在Azure上,並使用Azure中的應用程序設置面板通過環境變量覆蓋應用程序的設置。

但是,這在陣列上發生故障。目前我通過使用AppSettings:Queues:0:xxxxx語法覆蓋,並且工作正常。我甚至可以通過改變該語法中的索引,通過環境變量向列表添加其他條目。

問題是,在開發過程中,我添加了一個額外的隊列條目到本地appsettings.json文件,以測試一些新功能。部署後,即使沒有設置AppSettings:Queues:1:xxxxx環境變量,它仍在使用部署的appsettings.json文件中的第2項。

有沒有什麼辦法來告訴覆蓋,我想要一個乾淨的數組?這會造成不確定性,因爲我們無法確保開發人員不會添加測試項目,這將導致非測試環境做錯誤的事情。這將導致我們無法部署appsettings.json,這意味着我們無法在所有安裝中部署和管理理智默認值。

唯一的解決方法是提出一個任意數字(如10),併爲它們創建null覆蓋,但我相信這只是在向後推動罐子。

+1

你有沒有考慮在開發過程中使用appsettings.Development.json? – kloarubeek

+0

我想這是解決我的整體情況的一個很好的觀點,但我仍然認爲這是一個問題,因爲它使得數組覆蓋非常敏感並且容易出錯。 – KallDrexx

+0

只能在appsettings.Development中創建設置。json,保持appsettings.json清晰並使用Azure Web應用程序中的appsettings來存儲生產設置? – kloarubeek

回答

2

總結註釋:

移動的設置到appsettings.Development.json。然後,您可以存儲生產設置

  1. 在appsettings.json
  2. 沒有公佈appsettings.json可言,並且在Azure的Web應用程序在使用AppSettings:

app settings in web app

獎金:代替使用AppSettings:Queues:0:xxxxx,您可以使用IOptions feature:爲您的設置創建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

+0

是的,我在代碼本身使用'IOptions <>'注入的東西,'AppSettings:Queues:0:xxxxx'格式更適用於Azure的設置和定義配置生成器中使用的數據庫的設置覆蓋。 – KallDrexx

相關問題