Json配置
:::info Nuget下载包:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
:::
示例代码:
{
"name": "校长",
"age": 18,
"proxy": {
"server": "http://www.baidu.com",
"port": "8080"
}
}
internal class Program
{
static void Main(string[] args)
{
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true);
IConfigurationRoot config = configurationBuilder.Build();
string name = config["name"];
Console.WriteLine($"name={name}");
var server = config.GetSection("proxy:server").Value;
Console.WriteLine($"server={server}");
Proxy proxy = config.GetSection("proxy").Get<Proxy>();
Console.WriteLine($"server={proxy.Server},prot={proxy.port}");
Console.WriteLine();
Console.Read();
}
}
class Proxy
{
public string Server { get; set; }
public int port { get; set; }
}
IOC选项方式读取配置
:::info
- IOptions //直接单例,读出来就缓存,不支持数据变化,性能高—只能读默认名字
- IOptionsMonitor // 只读一次,写入缓存——-但是支持数据修改,靠的是监听文件更新(onchange)数据,实时变更
- IOptionsSnapshot //作用域注册,一次请求内数据是缓存不变的,但是不同请求是每次都会重新第一次数据
:::
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
static void Main(string[] args)
{
ServiceCollection services = new ServiceCollection();
services.AddScoped<Controller>();
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("config.json", optional: true, reloadOnChange: true);
IConfigurationRoot configurationRoot = configurationBuilder.Build();
services.AddOptions().Configure<Config>(e => configurationRoot.Bind(e));
using (var s = services.BuildServiceProvider())
{
while (true)
{
using(var sp = s.CreateScope()){
Controller controller = sp.ServiceProvider.GetRequiredService<Controller>();
controller.Test();
Console.WriteLine("修改JSON文件。。。");
Console.WriteLine("请输入,,");
Console.Read();
}
}
}
Console.Read();
}
public class Config
{
public string Name { get; set; }
public int Age { get; set; }
public Proxy proxy { get; set; }
}
public class Proxy
{
public string Server { get; set; }
public int port { get; set; }
}
public class Controller
{
private readonly IOptions<Config> optConfig1;///直接单例,读出来就缓存,不支持数据变化,性能高--只能度默认名字
private readonly IOptionsSnapshot<Config> optConfig;//作用域注册,一次请求内数据是缓存不变的,但是不同请求是每次都会重新第一次数据
private readonly IOptionsMonitor<Config> optConfig2;//只读一次,写入缓存-----但是支持数据修改,靠的是监听文件更新(onchange)数据,实时变更
public Controller(IOptionsSnapshot<Config> config, IOptions<Config> optConfig1, IOptionsMonitor<Config> optConfig2)
{
this.optConfig = config;
this.optConfig1 = optConfig1;
this.optConfig2 = optConfig2;
}
public void Test()
{
Console.WriteLine($"IOptions:{optConfig1.Value.Name},{optConfig1.Value.Age}");
Config config = optConfig.Value;
Console.WriteLine($"IOptionsSnapshot:{config.Name},{config.Age}");
Console.WriteLine($"IOptionsMonitor:{optConfig2.CurrentValue.Name},{optConfig2.CurrentValue.Age}");
}
}