<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
眾所周知,appsetting.json 組態檔是.Net 的重大革新之心,拋開了以前繁雜的xml檔案,使用了更簡潔易懂的json方式,簡直不要太舒服了!東西雖然好,但怎麼在程式中讀取這個設定呢,是每個新手必須要跨過去的坑(當然也是包括我這個菜狗子)。
遇事不明上注入,只要是遇到不知道怎麼辦的事,首先要往注入方便想,框架有了這個組態檔,必然配備了簡單直接的讀取API,按照我的習慣,直接上程式碼:
首先,我們在組態檔中,增加 Demo 設定節點:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "Demo": { "Value1": "1", "Value2": "2", "Value3": "3", "Value4": "4" } }
在需要用到組態檔的地方,注入 IConfiguration 服務介面
private readonly IConfiguration _configuration; public ValuesController(IConfiguration configuration) { _configuration = configuration; }
通常,我們比較直接的方式是通過 GetSection 獲取對應的設定節點,然後再獲取對應的設定項
var section = _configuration.GetSection("Demo"); var value1 = section.GetValue("Value1", "1");
如果 Demo 節點內還有更深的節點,GetSection 可以通過 : 深入到對應的下一個節點
appsetting.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "Demo": { "Value1": "1", "Value2": "2", "Value3": "3", "Value4": "4", "Model" { "Name": "小二", "Phone": "12345678911" } } }
var model = _configuration.GetSection("Demo:Model");
有些小夥伴可能就會問了,那我每個需要用到的地方都需要直接以字串作為引數去讀取設定,以後要是突然改了設定項,豈不是非常麻煩;
這點小夥伴們大可放心,你可以定義一個實體類,然後繫結上去,以後有什麼更改了,直接重新命名對應的屬性就行了,範例程式碼
方法一:
var options = new DemoOptions(); _configuration.GetSection("Demo").Bind(options);
方法二:
var options2 = _configuration.GetSection("Demo").Get<DemoOptions>();
方法三:在 Startup.cs、.Net 6 以上在 Program.cs- 中使用依賴注入方式,以下是 .Net 6
builder.Services.Configure<DemoOptions>(builder.Configuration.GetSection("Demo"));
在需要使用的地方注入 IOptions<TOptions> 即可獲取到設定值,需要注意的是,IOptions 是單例(Singleton)服務,即在應用啟動時進行註冊,後續更改組態檔,該 IOptions 將不會同步更新,依然還是舊值
private readonly DemoOptions _demoOptions; public ValuesController(IOptions<DemoOptions> options) { _demoOptions = options.Value; }
如需要設定進行熱更新,只需要改成注入 IOptionsMonitor<TOptions> 或者 IOptionsSnapshot<TOptions>;IOptionsSnapshot<TOptions>的生命週期是作用域(Scoped),每次請求都會重新獲取一次設定;IOptionsSnapshot<TOptions> 的生命週期是單例(Singleton),與 IOptions<TOptions> 不一樣的是當組態檔發生改變時,將會自動同步響應。
到此這篇關於.Net Core 組態檔讀取IOptions,IOptionsMonitor,IOptionsSnapshot的文章就介紹到這了,更多相關.Net Core 檔案讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45