using Microsoft.Extensions.Configuration; namespace OptionStudy.UnitApp { /// /// 5.1.4 将结构化数据直接绑定为对象 /// public class BindToObjectTest : IDisposable { private readonly ITestOutputHelper? testOutput; public BindToObjectTest(ITestOutputHelperAccessor helperAccessor) { testOutput = helperAccessor.Output; } /// /// 绑定配置为配置对象 /// 需要引入 Microsoft.Extensions.Configuration.Binder 包 /// [Fact] public void BinderFromStructuredConfig_Test() { //配置字典 var source = new Dictionary() { ["AppName"] = "MemoryAppName", ["AppVersion"] = "2.1.2.3", ["EMail:ReceiveAddress"] = "memory@163.com", ["EMail:Recipient"] = "memory", }; var config = new ConfigurationBuilder().AddInMemoryCollection(source).Build(); //显式绑定 { var appOption2 = new AppOption(); config.Bind(appOption2); } //直接使用Get()扩展方法或Get()泛型扩展方法 //注意:上述扩展方法均定义在 Microsoft.Extensions.Configuration.Binder 库中 // 换言之:只有引入了上面绑定库,才出现Get()扩展和Get泛型扩展方法 var appOption = config.Get(); //断言 Assert.NotNull(appOption); Assert.Equal("MemoryAppName", appOption.AppName); Assert.Equal("2.1.2.3", appOption.AppVersion); //子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。 Assert.NotNull(appOption.EMail); Assert.Equal("memory@163.com", appOption.EMail.ReceiveAddress); Assert.Equal("memory", appOption.EMail.Recipient); testOutput?.WriteLine("读取结构化配置,直接绑定到配置对象类!注意子配置节:父配置对象的属性名必须和配置KEY保持一致,否则不能自动绑定。"); } public void Dispose() { } } }