theme: condensed-night-purple
安装相关包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.JSON
创建json 配置文件
方式一
加载配置
``` using Microsoft.Extensions.Configuration;
namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional:true , reloadOnChange:true ); IConfigurationRoot configurationRoot = configuration.Build();
string name = configurationRoot["name"];
Console.WriteLine($"name={name}");
string addr = configurationRoot.GetSection("proxy:address").Value;
Console.WriteLine($"addr={addr}");
}
}
} ```
控制台展示
方式二
下载依赖
Microsoft.Extensions.Configuration.Binder
修改json配置
``` { "name": "zhangsan", "age": "33", "proxy": { "address": "南京一区", "port": "80" } }
```
测试
一、修改测试类
``` using Microsoft.Extensions.Configuration;
namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional: true, reloadOnChange: true ); IConfigurationRoot configurationRoot = configuration.Build();
/* string name = configurationRoot["name"];
Console.WriteLine($"name={name}");
string addr = configurationRoot.GetSection("proxy:address").Value;
Console.WriteLine($"addr={addr}");*/
Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
Console.WriteLine($"{proxy.Address},{proxy.port}");
}
class Proxy
{
public string Address { get; set; }
public int port { get;set; }
}
}
} ```
控制台展示
二、修改测试类
``` using Microsoft.Extensions.Configuration;
namespace Config { public class Class1 { static void Main(string[] args) { ConfigurationBuilder configuration = new ConfigurationBuilder(); configuration.AddJsonFile( "config.json", optional: true, reloadOnChange: true ); IConfigurationRoot configurationRoot = configuration.Build();
/* string name = configurationRoot["name"];
Console.WriteLine($"name={name}");
string addr = configurationRoot.GetSection("proxy:address").Value;
Console.WriteLine($"addr={addr}");*/
/* Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
Console.WriteLine($"{proxy.Address},{proxy.port}");*/
Config config = configurationRoot.Get<Config>();
Console.WriteLine(config.name);
Console.WriteLine(config.age);
Console.WriteLine(config.proxy.port);
Console.WriteLine(config.proxy.Address);
}
class Proxy
{
public string Address { get; set; }
public int port { get;set; }
}
class Config
{
public string name { get; set; }
public int age { get; set; }
public Proxy proxy { get; set; }
}
}
} ```
控制台展示
方式三
修改测试类
``` using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection;
namespace Config1 { public class Class1 { static void Main(string[] args) { ServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddScoped ();
ConfigurationBuilder configuration = new ConfigurationBuilder();
configuration.AddJsonFile(
"config.json",
optional: true,
reloadOnChange: true
);
IConfigurationRoot configurationRoot = configuration.Build();
serviceCollection.AddOptions().Configure<Config>(e=>configurationRoot.Bind(e));
using (var sp = serviceCollection.BuildServiceProvider())
{
var c = sp.GetRequiredService<Controller>();
c.Test();
}
/* string name = configurationRoot["name"];
Console.WriteLine($"name={name}");
string addr = configurationRoot.GetSection("proxy:address").Value;
Console.WriteLine($"addr={addr}");*/
/* Proxy proxy = configurationRoot.GetSection("proxy").Get<Proxy>();
Console.WriteLine($"{proxy.Address},{proxy.port}");*/
/* Config config = configurationRoot.Get<Config>();
Console.WriteLine(config.name);
Console.WriteLine(config.age);
Console.WriteLine(config.proxy.port);
Console.WriteLine(config.proxy.Address);*/
}
public class Proxy
{
public string Address { get; set; }
public int port { get;set; }
}
public class Config
{
public string name { get; set; }
public int age { get; set; }
public Proxy proxy { get; set; }
}
}
} ```
新增控制器
``` using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static Config1.Class1;
namespace Config1 { public class Controller {
public readonly IOptionsSnapshot<Config> optionConfig;
public Controller(IOptionsSnapshot<Config> optionConfig)
{
this.optionConfig = optionConfig;
}
public void Test()
{
Console.WriteLine(optionConfig.Value.name);
Console.WriteLine(optionConfig.Value.age);
Console.WriteLine(optionConfig.Value.proxy.Address);
Console.WriteLine(optionConfig.Value.proxy.port);
}
}
}
```
控制台输出
动态修改
若想控制台输出随着配置文件的修改而修改,可做出如下修改
``` using (var sp = serviceCollection.BuildServiceProvider()) { // 配置之后,会在下一个scope中生效 using(var scope = sp.CreateScope()) { var c = sp.GetRequiredService (); c.Test();
Console.WriteLine("********************");
var c2 = sp.GetRequiredService<Controller2>();
c2.Test();
}
}
```
方式四_控制台输入
安装包
Microsoft.Extensions.Configuration.CommandLine
修改启动类
configuration.AddCommandLine(args);
控制台输入参数
进入 xxx\Config\bin\Debug\net6.0,输出cmd
控制台输入 Config1.exe name=lisi age=23
调试框输入参数
复杂结构配置
方式五_修改环境变量
下载包
Microsoft.Extensions.Configuration.Environment
修改环境变量
修改启动类
运行结果
隔离环境变量
指定环境变量前缀:
configuration.AddEnvironmentVariables("c1_");
只有前缀为"c1_"的环境变量才能被读取