老一代配置系统

1,XML格式 格式单一。

2,配置信息Kye,只能一维化配置

3,框架信息和应用程序信息混合到一起

 .NET Core 配置文件

应用程序中是  App.config

web项目中           web.config

使用程序集  System.Configuration

新一代配置系统

1支持配置文件格式 json  xml  init  环境变量  memory

2参数热加载

3参数多维

 

nuget包

Microsoft.Extensions.Configuration

主要是用上面的

下面的是对应不同文件类型的扩展   都是扩展方法

Microsoft.Extensions.Configuration.Json

Microsoft.Extensions.Configuration.Xml

Microsoft.Extensions.Configuration.Init

Microsoft.Extensions.Configuration.EnvironmentVariables

下面的是进行模型转换的

Microsoft.Extensions.Configuration.Binder

1、命令行读取

• 无前缀的key=value 模式
• 双中横线模式 --key=value 或 --key value
• 正斜杠模式 /key=value 或 /key value
• 备注: 等号分隔符和空格分隔符不能混

命令替换模式

• 必须以单划线(-) 或双划线(--) 开头
• 映射字典不能包含重复Ke

2、环境变量

分层:__对应:  linux中不支持:

"SECTION1__SECTION2__KEY4": "value4",

configurationRoot.GetSection("SECTION1:SECTION2"); 

前缀过滤:

"KEY1": "value1",
"KEY2": "value2",
"XIAO_KEY1": "xiao key1"

      //kye1有值  key2没有值   ,这里只会加载  XIAO_前缀的    
builder.AddEnvironmentVariables("XIAO_");
            var configurationRoot = builder.Build();
            Console.WriteLine($"KEY1:{configurationRoot["KEY1"]}");
            Console.WriteLine($"KEY2:{configurationRoot["KEY2"]}");

3、文件读取 json xml等

文件可选,文件变化 热加载,文件变化回调函数

var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");

var configurationRoot = builder.Build(); IChangeToken token
= configurationRoot.GetReloadToken(); ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () => { Console.WriteLine($"Key1:{configurationRoot["Key1"]}"); Console.WriteLine($"Key2:{configurationRoot["Key2"]}"); Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); });

4、自定义配置,这样就可以轻松的扩展配置框架,对不同的配置源读取

class MyConfigurationProvider : ConfigurationProvider
{

    Timer timer;

    public MyConfigurationProvider() : base()
    {
        timer = new Timer();
        timer.Elapsed += Timer_Elapsed;
        timer.Interval = 3000;
        timer.Start();
    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        Load(true);
    }

    public override void Load()
    {
        //加载数据
        Load(false);
    }

    void Load(bool reload)
    {
        this.Data["lastTime"] = DateTime.Now.ToString();
        if (reload)
        {
            base.OnReload();
        }
    }


}

 

class MyConfigurationSource : IConfigurationSource
{
    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new MyConfigurationProvider();
    }
}

 

public static class MyConfigurationBuilderExtensions
{
    public static IConfigurationBuilder AddMyConfiguration(this IConfigurationBuilder builder)
    {
        builder.Add(new MyConfigurationSource());
        return builder;
    }
}

把具体实现定义为私有的,以扩展的方式对外暴漏

 

 

 

 

数据读取

.NET Core 配置文件

 

 

.NET Core 配置文件
//1   :  运算符  层级管理  数据的话用索引
var dcf1 = config["mysql:host"];
Console.WriteLine(dcf1);
var dcf11 = config["shopidlist:1:entid"];
Console.WriteLine(dcf11);


//2   getsection              getsection("")[""]
var dcf2 = config.GetSection("mysql").GetSection("host").Value;
Console.WriteLine(dcf2);
var dcf21 = config.GetSection("mysql:host").Value;
Console.WriteLine(dcf21);
var dcf3 = config.GetSection("mysql")["host"];
Console.WriteLine(dcf3);
var dcf4 = config.GetSection("shopidlist").GetSection("1")["entid"];
Console.WriteLine(dcf4);
var dcf5 = config.GetSection("shopidlist").GetSection("1").GetSection("entid").Value;
Console.WriteLine(dcf5);
//3强类型读取       Microsoft.Extensions.Configuration.Binder
//开发中常用强类型
var dcf6 = config.GetValue<int>("shopidlist:1:entid");
Console.WriteLine(dcf6);

Rootobject dcf7 = new Rootobject();
config.Bind(dcf7);
Console.WriteLine(dcf7.mysql.host);
View Code

相关文章: