網站首頁 編程語言 正文
前言
眾所周知,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> 不一樣的是當配置文件發生改變時,將會自動同步響應。
原文鏈接:https://www.cnblogs.com/ysmc/p/16637781.html
相關推薦
- 2022-11-14 Swift?指針底層探索分析_Swift
- 2022-11-13 Python?argparse模塊實現解析命令行參數方法詳解_python
- 2022-06-01 C#條件編譯、內聯函數、CLS介紹_C#教程
- 2023-01-23 Linux?paste命令用法匯總_linux shell
- 2022-06-24 Go單體服務開發最佳實踐總結_Golang
- 2022-12-07 C++?Boost?Container庫示例詳細講解_C 語言
- 2022-07-21 css讓不定寬高的div,垂直水平居中
- 2024-01-15 Stream流 - 獲取Stream和轉換操作(含基本數據類型流)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支