.Net?Core?配置文件讀取IOptions,IOptionsMonitor,IOptionsSnapshot
前言
眾所周知,appsetting.json 配置文件是.Net 的重大革新之心,拋開(kāi)了以前繁雜的xml文件,使用了更簡(jiǎn)潔易懂的json方式,簡(jiǎn)直不要太舒服了!東西雖然好,但怎么在程序中讀取這個(gè)配置呢,是每個(gè)新手必須要跨過(guò)去的坑(當(dāng)然也是包括我這個(gè)菜狗子)。
遇事不明上注入,只要是遇到不知道怎么辦的事,首先要往注入方便想,框架有了這個(gè)配置文件,必然配備了簡(jiǎn)單直接的讀取API,按照我的習(xí)慣,直接上代碼:
首先,我們?cè)谂渲梦募?,增?Demo 配置節(jié)點(diǎn):
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "Demo": { "Value1": "1", "Value2": "2", "Value3": "3", "Value4": "4" } }
在需要用到配置文件的地方,注入 IConfiguration 服務(wù)接口
private readonly IConfiguration _configuration; public ValuesController(IConfiguration configuration) { _configuration = configuration; }
通常,我們比較直接的方式是通過(guò) GetSection 獲取對(duì)應(yīng)的配置節(jié)點(diǎn),然后再獲取對(duì)應(yīng)的配置項(xiàng)
var section = _configuration.GetSection("Demo"); var value1 = section.GetValue("Value1", "1");
如果 Demo 節(jié)點(diǎn)內(nèi)還有更深的節(jié)點(diǎn),GetSection 可以通過(guò) : 深入到對(duì)應(yīng)的下一個(gè)節(jié)點(diǎn)
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");
有些小伙伴可能就會(huì)問(wèn)了,那我每個(gè)需要用到的地方都需要直接以字符串作為參數(shù)去讀取配置,以后要是突然改了配置項(xiàng),豈不是非常麻煩;
這點(diǎn)小伙伴們大可放心,你可以定義一個(gè)實(shí)體類(lèi),然后綁定上去,以后有什么更改了,直接重命名對(duì)應(yīng)的屬性就行了,實(shí)例代碼
方法一:
var options = new DemoOptions(); _configuration.GetSection("Demo").Bind(options);
方法二:
var options2 = _configuration.GetSection("Demo").Get<DemoOptions>();
方法三:在 Startup.cs、.Net 6 以上在 Program.cs- 中使用依賴(lài)注入方式,以下是 .Net 6
builder.Services.Configure<DemoOptions>(builder.Configuration.GetSection("Demo"));
在需要使用的地方注入 IOptions<TOptions> 即可獲取到配置值,需要注意的是,IOptions 是單例(Singleton)服務(wù),即在應(yīng)用啟動(dòng)時(shí)進(jìn)行注冊(cè),后續(xù)更改配置文件,該 IOptions 將不會(huì)同步更新,依然還是舊值
private readonly DemoOptions _demoOptions; public ValuesController(IOptions<DemoOptions> options) { _demoOptions = options.Value; }
如需要配置進(jìn)行熱更新,只需要改成注入 IOptionsMonitor<TOptions> 或者 IOptionsSnapshot<TOptions>;IOptionsSnapshot<TOptions>的生命周期是作用域(Scoped),每次請(qǐng)求都會(huì)重新獲取一次配置;IOptionsSnapshot<TOptions> 的生命周期是單例(Singleton),與 IOptions<TOptions> 不一樣的是當(dāng)配置文件發(fā)生改變時(shí),將會(huì)自動(dòng)同步響應(yīng)。
到此這篇關(guān)于.Net Core 配置文件讀取IOptions,IOptionsMonitor,IOptionsSnapshot的文章就介紹到這了,更多相關(guān).Net Core 文件讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
.NET新能源汽車(chē)鋰電池檢測(cè)程序UI掛死問(wèn)題分析
這篇文章主要為大家介紹了.NET新能源汽車(chē)鋰電池檢測(cè)程序UI掛死問(wèn)題分析?,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪(fǎng)問(wèn)操作
這篇文章主要介紹了ASP.NET?Core使用功能開(kāi)關(guān)控制路由訪(fǎng)問(wèn)操作,而對(duì)于一些試驗(yàn)性的功能,我們并不希望用密碼去控制是否允許訪(fǎng)問(wèn),而是想用一種開(kāi)關(guān)的方式開(kāi)放,下面文章我們就來(lái)試著實(shí)現(xiàn)這個(gè)功能,需要的小伙伴可以參考一下2022-02-02設(shè)計(jì)windows phone頁(yè)面主題
這篇文章主要介紹了設(shè)計(jì)windows phone頁(yè)面主題,需要的朋友可以參考下2015-07-07C#中string與byte[]的轉(zhuǎn)換幫助類(lèi)-.NET教程,C#語(yǔ)言
在寫(xiě)c#程序時(shí),string和byte[]之間的轉(zhuǎn)換比較煩,在移植一些老程序時(shí)感覺(jué)很不好。我在c#中使用des和tripledes時(shí)移植一塊老代碼時(shí)也遇到了同樣的情況。為了下次不為同樣的事情煩惱,就寫(xiě)了下面的幫助類(lèi)。2008-03-03.NET 6中使用DateOnly和TimeOnly類(lèi)型
這篇文章主要介紹了.NET 6中使用DateOnly和TimeOnly類(lèi)型,在.NET 6(preview 4)中引入了兩個(gè)期待已久的類(lèi)型,將作為核心庫(kù)的一部分。DateOnly和TimeOnly允許開(kāi)發(fā)人員表示DateTime的日期或時(shí)間部分,下文具體內(nèi)容,需要的小伙伴可以參考一下2022-01-01ASP.NET Core WebSocket集群實(shí)現(xiàn)思路詳解
這篇文章主要為大家介紹了ASP.NET Core WebSocket集群實(shí)現(xiàn)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11