diff --git a/OptionStudy.Next/2配置模型/ConfigurationManagerTest.cs b/OptionStudy.Next/2配置模型/ConfigurationManagerTest.cs
new file mode 100644
index 0000000..8f57366
--- /dev/null
+++ b/OptionStudy.Next/2配置模型/ConfigurationManagerTest.cs
@@ -0,0 +1,55 @@
+using Microsoft.Extensions.Configuration;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography.X509Certificates;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OptionStudy.Next
+{
+ ///
+ /// 5.2 配置模型 ConfigurationManager
+ /// ConfigurationManager 表示一个可动态改变的配置,统一了IConfigurationt和IConfigurationBuilder,Build方法返回的就是自身。
+ /// 当 Source 属性体现的配置源发生变化时,基自身维护的配置状态将自动更新。
+ /// ASP.NET Core 框架使用的就是这个对象,特别是最小API模式下。
+ ///
+ public class ConfigurationManagerTest: IDisposable
+ {
+ private readonly ITestOutputHelper testOutput;
+
+ private IDictionary memoryData = new Dictionary()
+ {
+ ["AppName"] = "MemoryAppName",
+ ["AppVersion"] = "0.0.0.1",
+ ["EMail:ReceiveAddress"] = "memory@163.com",
+ ["EMail:Recipient"] = "memory",
+ };
+
+ public ConfigurationManagerTest(ITestOutputHelper testOutputHelper)
+ {
+ testOutput = testOutputHelper;
+ }
+
+ ///
+ /// 使用配置管理器
+ /// 相当于 ConfigurationBuilder 和 IConfiguration(IConfigurationRoot)的 “合体”
+ ///
+ [Fact]
+ public void UseManager_Test()
+ {
+ ConfigurationManager manager = new ConfigurationManager();
+ manager.AddInMemoryCollection(memoryData);
+
+ var childerns = manager.GetChildren();
+
+ Assert.Equal(3, childerns.Count());
+ }
+
+ public void Dispose()
+ {
+
+ }
+ }
+}
diff --git a/OptionStudy.Next/2配置模型/IConfigurationProviderTest.cs b/OptionStudy.Next/2配置模型/IConfigurationProviderTest.cs
index fd2c6fa..c0268cb 100644
--- a/OptionStudy.Next/2配置模型/IConfigurationProviderTest.cs
+++ b/OptionStudy.Next/2配置模型/IConfigurationProviderTest.cs
@@ -15,7 +15,7 @@ namespace OptionStudy.Next
/// IConfigrutionProvider 被设计为 IConfigurationSource 构建,并保持在 IConfigurationBuilder 的属性中
/// 所以一般不单独实例化出来使用,而是配合 IConfigurationSource 和 IConfigurationBuilder 使用
///
- public class IConfigurationProviderTest: IDisposable
+ public class IConfigurationProviderTest : IDisposable
{
private readonly ITestOutputHelper testOutput;
@@ -49,20 +49,20 @@ namespace OptionStudy.Next
//关联 ConfigurationSource
var source = new MemoryConfigurationSource()
{
- InitialData = new Dictionary() { ["TestName"]="MyTest"}
+ InitialData = new Dictionary() { ["TestName"] = "MyTest" }
};
var provider = new MemoryConfigurationProvider(source);
Assert.NotNull(provider);
//可以进行各种操作
- Action run = () =>
+ Action run = () =>
{
provider.Set("TestName", "UpdateName");
- if (!provider.TryGet("Demo",out string _v))
- {
- provider.Add("Demo", "demo");
+ if (!provider.TryGet("Demo", out string _v))
+ {
+ provider.Add("Demo", "demo");
}
-
+
provider.Load();
};
@@ -76,28 +76,38 @@ namespace OptionStudy.Next
}
///
- /// 获取 IConfigrution 手动添加配置源
- /// 方法一:ConfigurationSource Build()方法
- /// 说明:参数为空值,框架设置的参数并没有在初始化中直接使用,可能是强调与 ConfigurationBuilder 关系吧
- /// IConfigurationProvider 应该由 IConfigurationBuilder 创建,基本是写在扩展方法里,这样设计可能是强调这种编程使用方式吧
+ /// IConfigurationProvider 由 Source 构建
///
[Fact]
- public void IConfigrutionProvider_Create_1_Test()
+ public void IConfigrutionProvider_BuildBySource_Test()
{
//内存配置源
MemoryConfigurationSource source = new MemoryConfigurationSource()
- {
- InitialData= memoryData,
+ {
+ InitialData = memoryData,
};
- //内存配置提供者:实际上由配置源提供,构建过程中直接使用配置源,不需要单独提出来
+
var provider = source.Build(null);
+ var hasName = provider.TryGet("AppName", out _);
+
+ Assert.NotNull(provider);
+ Assert.True(hasName);
+ }
- //直接使用配置源,无需显式使用 Provider
- var builder = new ConfigurationBuilder().Add(source);
- var configrution = builder.Build();
+ ///
+ /// IConfigurationProvider 由 IConfigruationBuilder 构建
+ ///
+ [Fact]
+ public void IConfigrutionProvider_IConfigruationBuilder_Test()
+ {
+ var builder = new ConfigurationBuilder().AddInMemoryCollection(memoryData).Build();
+ var provider = builder.Providers.First();
+
+ var hasName = provider.TryGet("AppName", out _);
- Assert.NotNull(configrution);
+ Assert.NotNull(provider);
+ Assert.True(hasName);
}
public void Dispose()