Json配置

:::info Nuget下载包:

Microsoft.Extensions.Configuration

Microsoft.Extensions.Configuration.Json

:::

示例代码:

  1. {
  2. "name": "校长",
  3. "age": 18,
  4. "proxy": {
  5. "server": "http://www.baidu.com",
  6. "port": "8080"
  7. }
  8. }
  1. internal class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
  6. configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true);
  7. IConfigurationRoot config = configurationBuilder.Build();
  8. string name = config["name"];
  9. Console.WriteLine($"name={name}");
  10. var server = config.GetSection("proxy:server").Value;
  11. Console.WriteLine($"server={server}");
  12. Proxy proxy = config.GetSection("proxy").Get<Proxy>();
  13. Console.WriteLine($"server={proxy.Server},prot={proxy.port}");
  14. Console.WriteLine();
  15. Console.Read();
  16. }
  17. }
  18. class Proxy
  19. {
  20. public string Server { get; set; }
  21. public int port { get; set; }
  22. }

IOC选项方式读取配置

:::info

  1. IOptions //直接单例,读出来就缓存,不支持数据变化,性能高—只能读默认名字
  2. IOptionsMonitor // 只读一次,写入缓存——-但是支持数据修改,靠的是监听文件更新(onchange)数据,实时变更
  3. IOptionsSnapshot //作用域注册,一次请求内数据是缓存不变的,但是不同请求是每次都会重新第一次数据

:::

  1. using Microsoft.Extensions.Configuration;
  2. using Microsoft.Extensions.Configuration.Json;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Options;
  5. static void Main(string[] args)
  6. {
  7. ServiceCollection services = new ServiceCollection();
  8. services.AddScoped<Controller>();
  9. ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
  10. configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true);
  11. IConfigurationRoot configurationRoot = configurationBuilder.Build();
  12. services.AddOptions().Configure<Config>(e => configurationRoot.Bind(e));
  13. using (var s = services.BuildServiceProvider())
  14. {
  15. while (true)
  16. {
  17. using(var sp = s.CreateScope()){
  18. Controller controller = sp.ServiceProvider.GetRequiredService<Controller>();
  19. controller.Test();
  20. Console.WriteLine("修改JSON文件。。。");
  21. Console.WriteLine("请输入,,");
  22. Console.Read();
  23. }
  24. }
  25. }
  26. Console.Read();
  27. }
  28. public class Config
  29. {
  30. public string Name { get; set; }
  31. public int Age { get; set; }
  32. public Proxy proxy { get; set; }
  33. }
  34. public class Proxy
  35. {
  36. public string Server { get; set; }
  37. public int port { get; set; }
  38. }
  39. public class Controller
  40. {
  41. private readonly IOptions<Config> optConfig1;///直接单例,读出来就缓存,不支持数据变化,性能高--只能度默认名字
  42. private readonly IOptionsSnapshot<Config> optConfig;//作用域注册,一次请求内数据是缓存不变的,但是不同请求是每次都会重新第一次数据
  43. private readonly IOptionsMonitor<Config> optConfig2;//只读一次,写入缓存-----但是支持数据修改,靠的是监听文件更新(onchange)数据,实时变更
  44. public Controller(IOptionsSnapshot<Config> config, IOptions<Config> optConfig1, IOptionsMonitor<Config> optConfig2)
  45. {
  46. this.optConfig = config;
  47. this.optConfig1 = optConfig1;
  48. this.optConfig2 = optConfig2;
  49. }
  50. public void Test()
  51. {
  52. Console.WriteLine($"IOptions:{optConfig1.Value.Name},{optConfig1.Value.Age}");
  53. Config config = optConfig.Value;
  54. Console.WriteLine($"IOptionsSnapshot:{config.Name},{config.Age}");
  55. Console.WriteLine($"IOptionsMonitor:{optConfig2.CurrentValue.Name},{optConfig2.CurrentValue.Age}");
  56. }
  57. }