1、前言
檔案配置提供程式默認的給我們提供了ini、json、Xml等,都是讀取不同格式的檔案,檔案配置提供程式支持檔案可尋、必選、檔案變更的監視,
2、讀取組態檔
主要運用的包:需要Ini、xml的添加相關包就行,

這次依然使用 Core3.1 WebApi專案,在啟動程式介面里面讀取json組態檔,先看看json檔案的格式,里面有很多嵌套的子元素,
{ "Name": "wyy", "Age": 18, "QQ": "30119459", "CardInfo": { "Name": "wyy", "Card": "5303231999XXX", "Birthday": "2001-02-28", "Address": { "Provience": "云南省", "City": "XX市", "Country": "XX縣" } }, "IsMarry": true }
我們在WeatherForecastController中修改get方法來讀取組態檔
[HttpGet] public int Get() { var builder = new ConfigurationBuilder(); //引數 檔案路徑 optional:檔案不錯在就會報錯(默認false) reloadOnChange:檔案變更了讀取新的檔案(默認true) builder.AddJsonFile("config.json",optional:false,reloadOnChange:true); var configRoot = builder.Build().GetSection("CardInfo").GetSection("Address"); var city = $"City:{configRoot["City"]}"; Console.WriteLine(city); return 1; }
這里需要注意的是,如果有很多層就挨個的GetSection 下去,現在讀取到的就是Address里面的資訊,這里讀取就跟MVC里面的一樣的 直接configRoot["節點名"];
3、使用物體類來接收組態檔
新增一個物體類configDto,里面的資訊要跟組態檔對應,資料型別也要對應,這里的原理就跟JsonConvert序列化一樣 不對應的就接收不到值
public class ConfigDto { public string Name { get; set; } public int Age { get; set; } public string QQ { get; set; } public CardInfo CardInfo { get; set; } public bool IsMarry { get; set; } } public class CardInfo { public string Name { get; set; } public string Card { get; set; } public string Birthday { get; set; } public Address Address { get; set; } } public class Address { public string Provience { get; set; } public string City { get; set; } public string Country { get; set; } }
呼叫的代碼
[HttpGet] public int Get() { var builder = new ConfigurationBuilder(); //引數 檔案路徑 optional:檔案不錯在就會報錯(默認true) reloadOnChange:檔案變更了讀取新的檔案(默認true) builder.AddJsonFile("config.json",optional:true,reloadOnChange:true); ConfigDto conf = new ConfigDto(); var configRoot = builder.Build(); configRoot.Bind(conf); return 1; }
運行專案打上斷點 添加監視可以Dto也獲取到值了,這樣強型別的呼叫起來豈不是更方便,

4、監視檔案的變更
[HttpGet] public int Get() { var builder = new ConfigurationBuilder(); //引數 檔案路徑 optional:檔案不錯在就會報錯(默認false) reloadOnChange:檔案變更了讀取新的檔案(默認true) builder.AddJsonFile("config.json",optional:false,reloadOnChange:true); ConfigDto conf = new ConfigDto(); var configRoot = builder.Build(); configRoot.Bind(conf); //監視檔案變更 IChangeToken token = configRoot.GetReloadToken(); ChangeToken.OnChange(() => configRoot.GetReloadToken(), () => { //做你想做的事 業務邏輯 Console.WriteLine("檔案修改了"); }); return 1; }
修改檔案可以看到保存的時候就會出現,不知道為何會出現兩次下來研究研究;

5、總結
這里主要弄了檔案的讀取、監視、強型別接收等操作、關于組態檔的程式修改下來慢慢研究,關于物體型別是否能設定私有有待考證,學無止境,
每日一句心靈雞湯:其實一個人也是可以活得漂亮,自己笑給自己看,自己哭給自己聽,懂得讓步的人是聰明的,這是把決定事態走向的主動權握在了自己手上,感情對抗中,贏了面子就輸了情分,往往死撐到底的人,都成孤家寡人,彎腰不是認輸,只是為了拾起丟掉的幸福,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/30413.html
標籤:.NET Core
