|
|
@ -15,7 +15,7 @@ namespace OptionStudy.Next
|
|
|
|
/// IConfigrutionProvider 被设计为 IConfigurationSource 构建,并保持在 IConfigurationBuilder 的属性中
|
|
|
|
/// IConfigrutionProvider 被设计为 IConfigurationSource 构建,并保持在 IConfigurationBuilder 的属性中
|
|
|
|
/// 所以一般不单独实例化出来使用,而是配合 IConfigurationSource 和 IConfigurationBuilder 使用
|
|
|
|
/// 所以一般不单独实例化出来使用,而是配合 IConfigurationSource 和 IConfigurationBuilder 使用
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
public class IConfigurationProviderTest: IDisposable
|
|
|
|
public class IConfigurationProviderTest : IDisposable
|
|
|
|
{
|
|
|
|
{
|
|
|
|
private readonly ITestOutputHelper testOutput;
|
|
|
|
private readonly ITestOutputHelper testOutput;
|
|
|
|
|
|
|
|
|
|
|
@ -49,7 +49,7 @@ namespace OptionStudy.Next
|
|
|
|
//关联 ConfigurationSource
|
|
|
|
//关联 ConfigurationSource
|
|
|
|
var source = new MemoryConfigurationSource()
|
|
|
|
var source = new MemoryConfigurationSource()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
InitialData = new Dictionary<string, string?>() { ["TestName"]="MyTest"}
|
|
|
|
InitialData = new Dictionary<string, string?>() { ["TestName"] = "MyTest" }
|
|
|
|
};
|
|
|
|
};
|
|
|
|
var provider = new MemoryConfigurationProvider(source);
|
|
|
|
var provider = new MemoryConfigurationProvider(source);
|
|
|
|
Assert.NotNull(provider);
|
|
|
|
Assert.NotNull(provider);
|
|
|
@ -58,9 +58,9 @@ namespace OptionStudy.Next
|
|
|
|
Action run = () =>
|
|
|
|
Action run = () =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
provider.Set("TestName", "UpdateName");
|
|
|
|
provider.Set("TestName", "UpdateName");
|
|
|
|
if (!provider.TryGet("Demo",out string _v))
|
|
|
|
if (!provider.TryGet("Demo", out string _v))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
provider.Add("Demo", "demo");
|
|
|
|
provider.Add("Demo", "demo");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
provider.Load();
|
|
|
|
provider.Load();
|
|
|
@ -76,28 +76,38 @@ namespace OptionStudy.Next
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
/// 获取 IConfigrution 手动添加配置源
|
|
|
|
/// IConfigurationProvider 由 Source 构建
|
|
|
|
/// 方法一:ConfigurationSource Build()方法
|
|
|
|
|
|
|
|
/// 说明:参数为空值,框架设置的参数并没有在初始化中直接使用,可能是强调与 ConfigurationBuilder 关系吧
|
|
|
|
|
|
|
|
/// IConfigurationProvider 应该由 IConfigurationBuilder 创建,基本是写在扩展方法里,这样设计可能是强调这种编程使用方式吧
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
[Fact]
|
|
|
|
[Fact]
|
|
|
|
public void IConfigrutionProvider_Create_1_Test()
|
|
|
|
public void IConfigrutionProvider_BuildBySource_Test()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//内存配置源
|
|
|
|
//内存配置源
|
|
|
|
MemoryConfigurationSource source = new MemoryConfigurationSource()
|
|
|
|
MemoryConfigurationSource source = new MemoryConfigurationSource()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
InitialData= memoryData,
|
|
|
|
InitialData = memoryData,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//内存配置提供者:实际上由配置源提供,构建过程中直接使用配置源,不需要单独提出来
|
|
|
|
|
|
|
|
var provider = source.Build(null);
|
|
|
|
var provider = source.Build(null);
|
|
|
|
|
|
|
|
var hasName = provider.TryGet("AppName", out _);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(provider);
|
|
|
|
|
|
|
|
Assert.True(hasName);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// IConfigurationProvider 由 IConfigruationBuilder 构建
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
|
|
|
public void IConfigrutionProvider_IConfigruationBuilder_Test()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var builder = new ConfigurationBuilder().AddInMemoryCollection(memoryData).Build();
|
|
|
|
|
|
|
|
var provider = builder.Providers.First();
|
|
|
|
|
|
|
|
|
|
|
|
//直接使用配置源,无需显式使用 Provider
|
|
|
|
var hasName = provider.TryGet("AppName", out _);
|
|
|
|
var builder = new ConfigurationBuilder().Add(source);
|
|
|
|
|
|
|
|
var configrution = builder.Build();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(configrution);
|
|
|
|
Assert.NotNull(provider);
|
|
|
|
|
|
|
|
Assert.True(hasName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
public void Dispose()
|
|
|
|