.Net Core 3.x Api開發筆記 -- 讀取配置文件信息(四)


上節演示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文件:

 使用時,在如下文件或者項目屬性中更改變量即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM