生活随笔
收集整理的這篇文章主要介紹了
五分钟了解dotnetcore配置框架
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、前言
配置的本質(zhì)就是字符串的鍵值對(duì),微軟的一系列接口其實(shí)就是對(duì)這些鍵值對(duì)字符串的抽象。
二、基本類型
2.1、Nuget包
2.2、抽象接口
三、基本配置
注:各種配置方式的目的是在控制臺(tái)中輸出以下內(nèi)容,如下圖:
3.1、加載內(nèi)存中的配置
static void Main(string[] args)
{IConfigurationBuilder builder = new ConfigurationBuilder();var memoryData = new Dictionary<string, string>();memoryData.Add("Student:Code", "10002385");memoryData.Add("Student:Name", "LiuSan");builder.AddInMemoryCollection(memoryData);IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}"); Console.Read();
}
3.2、加載環(huán)境變量中的配置
需要引入包:Microsoft.Extensions.Configuration.EnvironmentVariables
主要方法:builder.AddEnvironmentVariables()
環(huán)境變量中層級(jí)關(guān)系使用 __ 代替 :
static void Main(string[] args)
{IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddEnvironmentVariables();IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}");Console.Read();
}
3.3、加載命令行中的配置
需要引入包:Microsoft.Extensions.Configuration.CommandLine
主要方法:builder.AddCommandLine(args)
命令行中使用--表示配置項(xiàng),層級(jí)關(guān)系使用:
主要在docker中使用
static void Main(string[] args)
{IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddCommandLine(args);IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}");Console.Read();
}
3.4、加載Json中的配置
static void Main(string[] args)
{IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddJsonFile("appsettings.json");IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}");Console.Read();
}
3.5、加載xml中的配置
需要引入包:Microsoft.Extensions.Configuration.Xml
主要方法:builder.AddXmlFile("appsettings.xml")
xml中不會(huì)讀取最外層,所以Section必需從第二層開(kāi)始
static void Main(string[] args)
{IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddXmlFile("appsettings.xml");IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}");Console.Read();
}
四、高級(jí)配置
4.1、將配置綁定至強(qiáng)對(duì)象
class Program{static void Main(string[] args){IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddJsonFile("appsettings.json");IConfigurationRoot configurationRoot = builder.Build();var student = new Student();configurationRoot.GetSection("Student").Bind(student);Console.WriteLine($"Code:{student.Code}");Console.WriteLine($"Name:{student.Name}");Console.Read();}}class Student{public string Code { get; set; }public string Name { get; set; }}
4.2、IOptions
需要引入包:Microsoft.Extensins.Options
需要引入包:Microsoft.Extensions.Options.ConfigurationExtensions
本質(zhì)其實(shí)就是將一個(gè)Section配置節(jié)點(diǎn)映射到一個(gè)實(shí)體對(duì)象
class Program{static void Main(string[] args){IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddJsonFile("appsettings.json");IConfigurationRoot configurationRoot = builder.Build();IServiceCollection services = new ServiceCollection();services.Configure<WeixinOptions>(configurationRoot.GetSection("WeixinSetting"));services.AddScoped<IWeixinService, WeixinService>();var provider = services.BuildServiceProvider();var weixinService = provider.GetService<IWeixinService>();string appId = weixinService.AppId;string token = weixinService.Token;Console.Read();}}interface IWeixinService{string AppId { get; }string Token { get; }}class WeixinService: IWeixinService{IOptions<WeixinOptions> _options;public WeixinService(IOptions<WeixinOptions> options){_options = options;}public string AppId { get => _options.Value.AppId; }public string Token { get => _options.Value.Token;}}class WeixinOptions{public string AppId { get; set; }public string Token { get; set; }}
4.3、熱更新
static void Main(string[] args){IConfigurationBuilder builder = new ConfigurationBuilder();builder.AddJsonFile("appsettings.json", optional:false, reloadOnChange:true);IConfigurationRoot configurationRoot = builder.Build();IConfigurationSection configurationSection = configurationRoot.GetSection("Student");var token = configurationRoot.GetReloadToken();ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () => {Console.WriteLine("配置發(fā)生改變了...");Console.WriteLine($"Code:{configurationSection["Code"]}");Console.WriteLine($"Name:{configurationSection["Name"]}");}); Console.Read();}
五、總結(jié)
配置就是key-value鍵值對(duì)字符串
IConfiguration和IConfigurationRoot是對(duì)鍵值對(duì)的抽象
IConfigurationBuilder用于構(gòu)建IConfiguration和IConfigurationRoot
IConfigurationSource是對(duì)數(shù)據(jù)源的抽象
IConfigurationProvider將不同來(lái)源的IConfigurationSource 轉(zhuǎn)為統(tǒng)一的模型
IOptions方便將不同的配置節(jié)點(diǎn)(Path)映射為對(duì)應(yīng)的強(qiáng)類型對(duì)象
IConfigurationBuilder添加多個(gè)數(shù)據(jù)源(IConfigurationSource)后,如果key重名,則以最后一個(gè)配置為準(zhǔn)(覆蓋前面)
總結(jié)
以上是生活随笔為你收集整理的五分钟了解dotnetcore配置框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。