使用
VS2017 新建 Core Console程序,安裝包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
項(xiàng)目下新建appsettings-dev.json 文件
{
"sql": {
"ip": "127.0.0.1",
"port": 3389
},
"redis": {
"ip": "127.0.0.1",
"port": 6379
}
}
使用代碼
class Program
{
static void Main(string[] args)
{
ConfigurationBuilder builder = new ConfigurationBuilder();
//建造者模式
var configuaration= builder
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings-dev.json").Build();
var sqlInfo= $"sql:{configuaration["sql:ip"]} :{configuaration["sql:port"]}";
Console.WriteLine(sqlInfo);
Console.ReadKey();
}
}
輸出
sql:127.0.0.1 :3389
1 配置數(shù)據(jù)源多支持
json
xml
項(xiàng)目新建 appsettings.xml 配置文件
<?xml version="1.0" encoding="utf-8" ?>
<appsettings>
<ip>192.168.50.1</ip>
<port>3398</port>
</appsettings>
項(xiàng)目 <span style="color:red">NUGET</span>安裝 Microsoft.Extensions.Configuration.Xml 包
讀取配置代碼
var configuaration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddXmlFile("appsettings.xml")
.Build();
var mysqlInfo = $"mysql:{configuaration["ip"]} :{configuaration["port"]}";
Console.WriteLine(mysqlInfo);
Console.ReadLine();
輸出如下
mysql:192.168.50.1 :3398
ini
項(xiàng)目下新建 appsettings.ini 配置文件
[UserService]
name="UserService"
ip="192.168.1.101"
項(xiàng)目 <span style="color:red">NUGET</span>安裝 Microsoft.Extensions.Configuration.Ini 包
讀取配置的示例代碼如下:
var configuaration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddIniFile("appsettings.ini")
.Build();
var UserService = $"UserService Name:{configuaration["UserService:name"]} ;ip:{configuaration["UserService:ip"]}";
Console.WriteLine(UserService);
memory
讀取示例代碼如下:
var data=new Dictionary<string,string>();
data.Add("UserName", "admin ");
data.Add("Pwd","123456");
var configuaration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddInMemoryCollection(data)
.Build();
var user = $"$u:{configuaration["UserName"]},p:{configuaration["Pwd"]}";
Console.WriteLine(user);
Console.ReadLine();
command
env(系統(tǒng)變量)
項(xiàng)目 <span style="color:red">NUGET</span>安裝 Microsoft.Extensions.Configuration.EnvironmentVariables 包
可以讀取當(dāng)前操作系統(tǒng)下的系統(tǒng)變量,讀取示例代碼如下:
var configuaration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
.AddEnvironmentVariables()
.Build();
Console.WriteLine(configuaration["Path"]);//Path 為當(dāng)前操作系統(tǒng)變量
var p= Environment.GetEnvironmentVariable("Path"); //也可以讀取系統(tǒng)環(huán)境變量
2 熱加載
reloadOnChange 參數(shù)設(shè)置為true
var configuaration = builder
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings-dev.json",true,reloadOnChange:true)//reloadOnChange
.Build();
var sqlInfo = $"sql:{configuaration["sql:ip"]} :{configuaration["sql:port"]}";
while (true)
{
Console.WriteLine(sqlInfo);
System.Threading.Thread.Sleep(1000);
}
3 多環(huán)境加載 (Development, Test,Fat,Production)
4 配置加載優(yōu)先級(jí)
項(xiàng)目中加入兩個(gè)配置文件
appsettings-dev.json
{
"sql": {
"ip": "127.0.0.1",
"port": 3389
},
"redis": {
"ip": "127.0.0.1",
"port": 6379
},
"UserService": {
"name": "UserService",
"ip": "212.10.20.101"
}
}
appsettings.json
{
"UserService": {
"name": "UserService",
"ip": "127.0.0.1"
}
}
讀取配置代碼如下:
ConfigurationBuilder builder = new ConfigurationBuilder();
var configuaration = builder
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings-dev.json")
.AddJsonFile("appsettings.json")
.
Build();
var UserService = $"UserService: ip :{configuaration["UserService:ip"]}";
Console.WriteLine(UserService);
Console.ReadLine();
輸出為UserService: ip :127.0.0.1
證明了配置的加載完后,相同的配置 會(huì)被后加載的配置覆蓋。(具體在源碼中可以知道 加載完的配置被反轉(zhuǎn),然后讀取到了就會(huì)返回)
5 配置強(qiáng)類型讀取與弱類型讀取
弱類型讀取 代碼示例
//弱類型讀取 使用 : 運(yùn)算符
Console.WriteLine($"UserService: ip :{configuaration["UserService:ip"]}");
//弱類型讀取 GetSection
Console.WriteLine($"UserService: ip :{configuaration.GetSection("UserService")["ip"]}");
強(qiáng)類型讀取
項(xiàng)目 <span style="color:red">NUGET</span> 安裝 Microsoft.Extensions.Configuration.Binder 包
代碼示例
//強(qiáng)類型讀取 GetValue
Console.WriteLine($"UserService: ip :{configuaration.GetValue<string>("UserService:ip")}");
//強(qiáng)類型讀取 Bind
ConfigRoot s = new ConfigRoot();
configuaration.Bind(s);
Console.WriteLine($"UserService: ip :{s.UserService.ip}");
// 強(qiáng)類型讀取 Get<T>
Console.WriteLine($"UserService: ip :{ configuaration.Get<ConfigRoot>().UserService.ip}");
``