1、IConfigurationSource
:表示一个配置源,其Build
方法生成的IConfigurationProvider
用于从当前配置源中读取key-value值(TryGey读取、Set设置键值、Load加载配置源到key-value集合、GetChildKey获取根据前缀key获取子key集合,并将earlierKeys添加到返回的字符串集合中)。IConfigurationProvider
有直接实现类ConfigurationProvider
,自定义IConfigurationProvider
的时候,一般直接继承ConfigurationProvider
类。
2、IConfigurationBuilder
用于 IConfigurationRoot(从IConfiguration继承)
对象,这也是最终供我们使用的key-value集合 。IConfigurationBuilder接口中 Sources
属性维护了一系列的 IConfigurationSource
列表。Properties
属性维护了和文件相关的字典。
static void Main(string[] args)
{
//1、创建IConfigurationBuilder
IConfigurationBuilder builder = new ConfigurationBuilder();
//2、创建配置源并添加到Builder中 IConfigurationSource
//2、1系统自带的IConfigurationSource
List<KeyValuePair<string, string>> InitialData = new List<KeyValuePair<string, string>>();
InitialData.Add(new KeyValuePair<string, string>("name", "caoruipeng"));
InitialData.Add(new KeyValuePair<string, string>("info:age", "29"));
InitialData.Add(new KeyValuePair<string, string>("info:school", "北华大学"));
InitialData.Add(new KeyValuePair<string, string>("user:name", "北华大学"));
IConfigurationSource source = new MemoryConfigurationSource() { InitialData = InitialData };
builder.Add(source);
//2、2自定义IConfigurationSource
IDictionary<string, string> data = new Dictionary<string, string>();
data.Add("dbkey", "dbvalue");
IConfigurationSource dbSource = new DBConfigurationSource(data);
builder.Add(dbSource);
//3、创建key-value集合
IConfigurationRoot configuration = builder.Build();
//4、获取key-value
string value = configuration["name"];
value = configuration.GetValue<string>("name");
Console.WriteLine($"key:name,value:{value}");
value = configuration.GetValue<string>("dbkey");
Console.WriteLine($"key:dbkey,value:{value}");
IConfigurationSection section = configuration.GetSection("info");
}
/// <summary>
/// 自定义配置源
/// </summary>
public class DBConfigurationSource : IConfigurationSource
{
IDictionary<string, string> data = new Dictionary<string, string>();
public DBConfigurationSource(IDictionary<string, string> data)
{
this.data = data;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new DBConfigurationProvider(data);
}
}
/// <summary>
/// 自定义配置源的Provider,用于从配置源中读取key-value值
/// </summary>
public class DBConfigurationProvider : ConfigurationProvider
{
public DBConfigurationProvider(IDictionary<string, string> data)
{
Data = data;
}
public override void Load()
{
base.Load();
}
}