简读《ASP.NET Core技术内幕与项目实战》之3:配置( 二 )

代码解释:
17-29行:定义两个类(选项类),分别映身appsettings的两个属性 。SmtpSettings.cs映射Smtp属性,DbSettings.cs映射Db属性,名字一一对应
38行:构建依赖注入的容器
39-41行:注册选项服务AddOptions,并设置“选项类和配置文件属性”之间的映射关系 。这样写也可以:services.AddOption;services.Configure<DbSettings>......
43行:将读取配置的类注册为瞬时服务(ReadOptions) , 这样在后面循环读取配置时,每次都能创建一个新的服务
45-58行:通过服务定位器的方式获取服务(ReadOptions对象),使用了子域方式,稍显复杂 , 主要目的是测试修改appsettings时的实时更新
63-81行:以依赖注入的方式,注入读取配置的服务 , 注意不能直接使用SmtpSettings或DbSettings,需要使用IOptions<T>泛型接口
补充说明:
①读取配置的泛型接口,有三种:IOptions<T>(类似单例),IOptionsMonitor<T>(类似范围),IOptionsSnapshot<T>(类似瞬时) 。以上案例,改成另外两个 , 都无法实现配置信息的实时更新 。其中IOptions<T>,需要重启应用;IOptionsMonitor<T>,重启应用 , 或者修改代码,不在Scope中读取
三、在ASP.NET Core中设置和读取配置(本节有补充知识点)
1 //appsettings.json文件 2 { 3"Smtp": { 4"Server": "192.1.1.1", 5"UserName": "functionMC", 6"Password": "123456" 7} 8 } 91011 //选项类SmtpSettings.cs12 public class SmtpSettings13 {14public string Server { get; set; }15public string UserName { get; set; }16public string Password { get; set; }17 }181920 //使用MiniApi方式,直接在Program中设置选项绑定和读取配置21 var builder = WebApplication.CreateBuilder(args);22 builder.Services.Configure<SmtpSettings>(builder.Configuration.GetSection("Smtp"));2324 var app = builder.Build();2526 app.MapGet("/", (IConfiguration config,IOptions<SmtpSettings> smtpOptions) =>27 {28return $"直接读?。簕config["Smtp:UserName"]} , 选项读?。簕smtpOptions.Value.UserName}";29 });3031 app.Run();代码解释:
21行:CreateBuilder完成一系列框架设置,包括配置体系(AddJsonFile , AddOptions等),所以不需要手动设置配置体系,框架自动设置多配置源
22行:绑定选项类和配置属性 。在Program中不方便注入,通过调用build的属性Configuration , 返回IConfiguration接口读取配置(区别于.NET中的IConfigurationRoot)
26行:通过MiniApi的参数注入两个服务,IConfigurations和IOptions<T> , 均由框架自动注册 。如果使用控制器,可通过构造函数方式注入
28行:使用两种方式读取配置:直接读取配置、通过选项方式读取配置
【简读《ASP.NET Core技术内幕与项目实战》之3:配置】

推荐阅读