aspnetcore讀取配置【原始碼分析】
阿新 • • 發佈:2020-08-13
總的邏輯
// 1 新增配置源source ,結果儲存在IConfigurationBuilder的成員變數 IList<IConfigurationSource> Sources { get; } 中 IConfigurationBuilder.Add(IConfigurationSource source) // 2 載入配置 var configurationRoot = IConfigurationBuilder.Build() // 2.1 迴圈Sources,呼叫IConfigurationSource.Build(IConfigurationBuilder builder) , //該方法返回xxxxConfigurationSource對應的xxxxConfigurationProvider, //並將返回值儲存在List<IConfigurationProvider>providers中 //2.2 將變數providers傳遞給ConfigurationRoot物件 ,new ConfigurationRoot(providers), //該建構函式內迴圈providers ,呼叫IConfigurationProvider.Load() //將配置的具體內容載入到 ConfigurationProvider 類中的 IDictionary<string, string> Data; // 3 獲取想要的值 string value1= configurationRoot["key1"]
舉例 ,載入命令列配置
var args = new string[] { "Key1=Value1", "Key2=Value2", }; // 建立ConfigurationBuilder例項 var builder = new ConfigurationBuilder(); //1 新增配置源, 實際上IConfigurationBuilder有很多擴充套件方法,可以更方便的新增配置 builder.AddCommandLine(args); //2 開始載入配置 var configurationRoot = builder.Build(); //3 使用配置 Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
根據最上面的載入配置的邏輯 ,上面的這個例子的內部核心是這樣的
var args = new string[] { "Key1=Value1", "Key2=Value2", }; //設定配置源 var cmdLineConfig = new CommandLineConfigurationProvider(args); //載入配置源 cmdLineConfig.Load(); //使用配置 Console.WriteLine($"Key1:{cmdLineConfig.Get("Key1")}");