先给出appsettings.json的参考结构,将以读取redis节点数据为例
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", //Redis服务配置 "Redis": { "Default": { "Connection": "127.0.0.1:6379", "InstanceName": "local", "DefaultDB": 0 } } }
方法1:供Program.cs调用
string connection = ""; IConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json"); IConfigurationRoot configRoot = configBuilder.Build(); connection = configRoot.GetSection("Redis:Default:Connection").Value; Redis.RedisInit.RedisInitialization(Redis.RedisInit.RedisClientType.CSRedisCore,$"{connection},defaultDatabase=0,idleTimeout=3000,poolsize=5,prefix="); builder.Services.AddSingleton<Redis.IRedisAccess, Redis.CSRedisAccess>();
方法2:供Program.cs调用,包装成对象
namespace CSRedisCoreDemo { public class DBConfig { public string Connection { get; set; } public string InstanceName { get; set; } public int DefaultDB { get; set; } } }
string connection = ""; IConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json"); IConfigurationRoot configRoot = configBuilder.Build(); DBConfig? db = configRoot.GetSection("Redis:Default").Get<DBConfig>(); connection = db?.Connection ?? ""; Redis.RedisInit.RedisInitialization(Redis.RedisInit.RedisClientType.CSRedisCore,$"{connection},defaultDatabase=0,idleTimeout=3000,poolsize=5,prefix="); builder.Services.AddSingleton<Redis.IRedisAccess, Redis.CSRedisAccess>();
方法3:供控制器调用,部分包装成对象,仅能访问指定配置节
namespace CSRedisCoreDemo { public class DBConfig { public string Connection { get; set; } public string InstanceName { get; set; } public int DefaultDB { get; set; } } }
namespace CSRedisCoreDemo { public class Log { public string Default { get; set; } } }
IConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json"); IConfigurationRoot configRoot = configBuilder.Build(); builder.Services.Configure<DBConfig>(configRoot.GetSection("Redis:Default")) .Configure<Log>(configRoot.GetSection("Logging:LogLevel"));
[ApiController] [Route("[controller]")] public class StringController : ControllerBase { private IOptions<DBConfig> _options; private IOptions<Log> _optionslog; public StringController(IOptions<DBConfig> options, IOptions<Log> optionslog) { _options = options; _optionslog = optionslog; } [Route("/test")] [HttpGet()] public void Test() { Console.WriteLine($"{_options.Value.Connection},{_optionslog.Value.Default}"); } }
方法3:供控制器调用,提供所有配置节,不包装成对象
string connection = ""; IConfigurationBuilder configBuilder = new ConfigurationBuilder(); configBuilder.AddJsonFile("appsettings.json"); IConfigurationRoot configRoot = configBuilder.Build(); builder.Services.AddSingleton(configRoot);
[ApiController] [Route("[controller]")] public class StringController : ControllerBase { private readonly IConfigurationRoot _settings;//配置文件注入 public StringController(IConfigurationRoot settings,) { _settings = settings; } [Route("/test")] [HttpGet()] public void Test() { //获取配置文件信息 Console.WriteLine($"{_settings.GetSection("AllowedHosts").Value}"); } }
配置文件不仅有json格式,还有命令行格式和系统变量等形式,分别对应不同的应用场景。
切勿将配置文件上传到GitHub,以免泄露数据造成损失。之前有丢失开房信息、机密信息等案例。
标签:configRoot,读取,appsettings,Redis,json,configBuilder,public,string From: https://www.cnblogs.com/tudou365/p/17042734.html