1. 程式人生 > 實用技巧 >aspnetcore讀取配置【原始碼分析】

aspnetcore讀取配置【原始碼分析】

總的邏輯

// 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")}");