上節示範Autofac使用,連接配接:.Net Core 3.x Api開發筆記 -- IOC,使用Autofac實作依賴注入(三)
本節示範如何讀取應用配置資訊,也就是讀取 appsettings.json 檔案中的配置資訊
本節通過讀取資料庫配置檔案做完示範:
第1步:在 appsettings.json 添加資料庫配置檔案
1 //資料庫連接配接字元串
2 "DBConfig": {
3 "DBType": "Mysql", //mysql、mssql、oracle
4 "DBConnectionString": "Data Source=localhost;Database=MyShop;User Id=root;Password=123456;CharSet=utf8;port=3306", //mysql連接配接字元串
5 "DBTimeout": 180, //180s 機關秒
6 "RedisConnectionString": "127.0.0.1:6379,password=123456,abortConnect=false" //redis連接配接字元串
7 }
第2步:建立一個類:DBConfig,用于存放上述配置檔案内容
public class DBConfig
{
/// <summary>
/// 資料庫類型 mysql、mssql、oracle
/// </summary>
public string DBType { get; set; }
/// <summary>
/// 連結字元串
/// </summary>
public string DBConnectionString { get; set; }
/// <summary>
/// 連結逾時時間
/// </summary>
public string DBTimeout { get; set; }
/// <summary>
/// redis連結字元串
/// </summary>
public string RedisConnectionString { get; set; }
}
//全局配置
public class SystemContext
{
/// <summary>
/// 讀取資料庫配置檔案
/// </summary>
public static DBConfig dbConfig { get; set; }
}
第三步:在 Startup 檔案中初始化配置檔案内容
1 public void ConfigureServices(IServiceCollection services)
2 {
3 services.AddControllers();
4
5 //方式1
6 //讀取配置檔案appsettings.json,将自定義節點綁定到DBConfig類中,在任意地方直接使用
7 //配置檔案更新,綁定的值不會實時更新
8 SystemContext.dbConfig = Configuration.GetSection("DBConfig").Get<DBConfig>();
9
10 //方式2
11 //将DBConfig對象注冊到Service中,這樣可以在Controller中注入使用
12 //配置檔案更新,綁定的值會實時更新
13 services.Configure<DBConfig>(Configuration.GetSection("DBConfig"));
14 }
上邊有兩種配置方式,可以任選一種,方式1不會實時更新配置檔案内容,方式2會實時更新配置檔案内容,根據業務需求自由選擇
第四步:在應用中使用
1 private readonly IOptionsSnapshot<DBConfig> dbConfig; //通過注入方式讀取配置檔案
2
3 public UserController(IOptionsSnapshot<DBConfig> _dbConfig)
4 {
5 dbConfig = _dbConfig;
6 }
7
8 [HttpGet]
9 public async Task<IActionResult> GetConfig()
10 {
11 var result = await Task.Run(() =>
12 {
13 //方式1 讀取配置檔案 不會實施更新内容
14 var dbType = SystemContext.dbConfig.DBType.ToLower();
15 return dbType;
16 });
17
18 //方式2 讀取配置檔案 可以實施更新内容
19 var result2 = dbConfig.Value.DBType.ToLower();
20
21 return Ok("方式1:" + result + ",方式2:" + result2);
22 }
最後測試結果顯示,方式2 會跟随配置檔案内容的變更實時更新,而方式1沒有變化!

後記:
一個服務或者産品,往往需要三個環境:一個開發環境(Development),一個測試環境(Staging),一個生産環境(Production),
這就不可避免的需要多個配置檔案來比對相應的環境,因為不可能三個環境都使用同一個配置,
解決辦法如下: 在Startup中自定義加載 appsetting.json檔案
1 public class Startup
2 {
3 private IHostEnvironment CurrentEnvironment { get; set; }
4
5 public Startup(IHostEnvironment env)
6 {
7 var builder = new ConfigurationBuilder()
8 .SetBasePath(env.ContentRootPath)
9 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
10 .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
11 .AddEnvironmentVariables();
12 Configuration = builder.Build();
13 CurrentEnvironment = env;
14 }
15
16 public IConfigurationRoot Configuration { get; }
。。。。。。
然後在項目裡添加三個settings的json檔案:
使用時,在如下檔案或者項目屬性中更改變量即可。
作者:PeterZhang
出處:https://www.cnblogs.com/peterzhang123
本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,并保留此段聲明,否則保留追究法律責任的權利。