ASP .NET Core 配置系統(tǒng)

使用

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}");
``

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139
  • 一、應(yīng)用程序文件結(jié)構(gòu) 如下圖所示,相比于Asp.Net項(xiàng)目,在新建的Asp.Net Core項(xiàng)目中,沒有了Glob...
    房祥_a7f1閱讀 8,048評(píng)論 0 7
  • 原文:ASP.NET Core - Getting Started with ASP.NET Core 2.0 A...
    書上得來(lái)終覺淺閱讀 9,749評(píng)論 0 6
  • 2018面對(duì)我工作的最后十七個(gè)月,心情復(fù)雜,興奮亦或不舍,兼而有之。不管怎樣,對(duì)這最后的一年做一個(gè)小小的規(guī)劃: 一...
    向往高原閱讀 248評(píng)論 2 2
  • 孩子虛胖多病,家長(zhǎng)該如何護(hù)理? 有些家長(zhǎng)說(shuō),自己家的孩子看上去白白胖胖的,但卻一點(diǎn)都不壯實(shí),平時(shí)稍稍一運(yùn)動(dòng)就說(shuō)累了...
    后愛千秋一葉閱讀 210評(píng)論 0 0

友情鏈接更多精彩內(nèi)容