上节演示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
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。