網(wǎng)站首頁 編程語言 正文
在ASP.NET Core 中,應(yīng)用程序配置數(shù)據(jù)可以使用JSON, XML 和 INI格式 和內(nèi)置環(huán)境變量,命令行參數(shù)或內(nèi)存中的集合。
1.如何獲取和設(shè)置配置
ASP.NET Core配置系統(tǒng)針對(duì)以前的依賴于System.Configuration和XML配置文件(如Web.config)的ASP,NET 版本進(jìn)行了重構(gòu)。新的配置模型提供了精簡高效的,能夠通過檢索多樣化提供程序來獲取基于鍵/值對(duì)配置的能力。應(yīng)用程序和框架可以通過新的選擇模式訪問配置。
可以在ASP.NET Core應(yīng)用程序中的Startup類中只實(shí)例化一個(gè)Configuration示例,然后選擇模式來訪問各自的設(shè)置。
Configuration類是一個(gè)提供讀寫鍵/值對(duì)能力的Providers集合。如果一個(gè)鍵值對(duì)寫入Configuration,它不會(huì)持久,當(dāng)源再次讀寫值時(shí)將會(huì)丟失。因此至少需要配置一個(gè)數(shù)據(jù)源,使得configuration能正常工作。
下面通過內(nèi)存配置演示Configuration處理鍵值對(duì):
內(nèi)存配置一般用在一次請(qǐng)求中需要暫存數(shù)據(jù)的情況,例如,如果管道中有多個(gè)中間件,可以在某一個(gè)中間件中暫存數(shù)據(jù),后面的某一個(gè)中使用。
在開發(fā)中一般會(huì)把配置值放在一個(gè)有層次的數(shù)據(jù)結(jié)構(gòu)中,例如appsettings.json,在這種情況下,可以使用以: 符號(hào)分割(從層次結(jié)構(gòu)的根開始)的鍵讀取值:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=.;Initial Catalog=AccessManagement;Integrated Security=True"
},
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*",
"MyOptions": {
"Option1": "ww",
"Option2": 3
}
}
在應(yīng)用程序中通過Configuration獲取配置的連接字符串,可以通過ConnectionStrings:DefaultConnection讀取ConnectionStrings的設(shè)置,也可以通過GetConnectionString擴(kuò)展方法加參數(shù)"DefaultConnection"來獲取。
應(yīng)用程序所需要的設(shè)置和指定配置的機(jī)制都可以通過使用選擇模式解耦。創(chuàng)建自己的配置類時(shí),可以是幾個(gè)不同的類,分別對(duì)應(yīng)不同的配置組,然后通過選項(xiàng)服務(wù)注入到應(yīng)用程序中。這樣就可以通過配置或其他所選擇的機(jī)制來設(shè)置了。
2.使用內(nèi)置數(shù)據(jù)源
開發(fā)時(shí)并不局限于必須使用單個(gè)配置提供程序,可以把多個(gè)配置提供程序組合在一起。
擴(kuò)展方法支持為配置添加額外的配置文件提供程序。這些方法能被獨(dú)立的或鏈?zhǔn)秸{(diào)用在ConfigurationBuilder實(shí)例之上:
public Startup()
{
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
var config = builder.Build();
var _config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
}
指定配置提供程序的順序很重要,這將影響他們的設(shè)置被應(yīng)用的優(yōu)先級(jí):
public Startup(IConfiguration configuration,IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json",optional:true,reloadOnChange:true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true);
//配置環(huán)境變量
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
IHostingEnvironment 服務(wù)用于獲取當(dāng)前環(huán)境。在Development環(huán)境中,AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true)將會(huì)查找appsettings.Development.json配置文件,并覆蓋appsettings.json中存在的值。同樣環(huán)境變量也會(huì)覆蓋它們兩個(gè)的值。
一旦將指定文件作為配置源,就可以選擇當(dāng)文件發(fā)生變化后,是否重新再付這部分的配置,reloadOnChange:true。
3.使用選項(xiàng)和配置對(duì)象
選擇模式可使用自定義的配置類表示一組相關(guān)設(shè)置。這個(gè)配置類需要為配置項(xiàng)提供公開的 屬性和一個(gè)無參的構(gòu)造函數(shù)??梢愿鶕?jù)應(yīng)用程序的功能分解為多個(gè)配置對(duì)象。
下面自定義appsettings.json的配置類,并使用:
先創(chuàng)建配置類
namespace MVCTest
{
public class AppSettingOptions
{
public DefaultConnec ConnectionStrings { get; set; }
public string AllowedHosts { get; set; }
}
public class DefaultConnec
{
public string DefaultConnection { get; set; }
}
}
在ConfigureServices中調(diào)用選項(xiàng)服務(wù):
public Startup(IConfiguration configuration,IHostingEnvironment env)
{
//Configuration = configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional:true,reloadOnChange:true)
//.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true);
//配置環(huán)境變量
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();//提供依賴注入
services.Configure<AppSettingOptions>(Configuration); //綁定配置選項(xiàng)
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
在HomeController中使用:
public class HomeController : Controller
{
private readonly IOptions<AppSettingOptions> _options;
public HomeController(IOptions<AppSettingOptions> options,)
{
_options = options;
}
public static Logger nlog = LogManager.GetCurrentClassLogger();
public IActionResult Index()
{
var AllowedHosts = _options.Value.AllowedHosts;
var DefaultConnection = _options.Value.ConnectionStrings.DefaultConnection;
}
}
結(jié)果:
當(dāng)通過綁定選項(xiàng)來配置選項(xiàng)類型的每一個(gè)屬性時(shí),實(shí)際上是綁定到每一個(gè)配置鍵。配置鍵是大小寫不敏感的。
當(dāng)通過調(diào)用services.Configure<AppSettingOptions>(Configuration);代碼,將一個(gè)IConfigureOptions<AppSettingOptions>服務(wù)加入服務(wù)容器,是為了后面應(yīng)用程序或框架能通過IOptions<AppSettingOptions>服務(wù)來獲取配置。若想從其他途徑(從數(shù)據(jù)庫通過EF獲?。┇@取配置,可以使用ConfigureOptions<TOptions>擴(kuò)展方法直接指定經(jīng)過定制的IConfigureOptions<TOptions>服務(wù)。
其他方法:
//通過代碼編寫
services.Configure<AppSettingOptions>(options=>
{
options.AllowedHosts = "test";
});
//只配置部分
services.Configure<AppSettingOptions>(Configuration.GetSection("ConnectionStrings"));
原文鏈接:https://www.cnblogs.com/afei-24/p/10816523.html
相關(guān)推薦
- 2022-10-04 Redis中Redisson紅鎖(Redlock)使用原理_Redis
- 2023-03-18 pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn)_python
- 2022-11-06 Go+Redis實(shí)現(xiàn)延遲隊(duì)列實(shí)操_Golang
- 2022-11-18 關(guān)于python中第三方庫交叉編譯的問題_python
- 2022-08-26 Python實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN的示例代碼_python
- 2023-01-18 pip?search報(bào)錯(cuò)問題及解決_python
- 2023-01-15 關(guān)于networkx返回圖的鄰接矩陣問題_python
- 2022-04-05 C#反射調(diào)用拓展類方法實(shí)例代碼_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支