CSDN|基于选项模式实现.NET Core的配置热更新( 二 )
//写法2:自动绑定
leaningOptions = Configuration.GetSection("Learning").Get<LearningOptions>;
//写法3:自动绑定 + 依赖注入
services.Configure<LearningOptions>(Configuration.GetSection("Learning"));
//写法4:配置的二次加工
services.PostConfigure<LearningOptions>(options => options.Years += 1);
//写法5:委托绑定
services.Configure<AppInfoOptions>(options =>
{
options.AppName = "ASP.NET Core";
options.AppVersion = "1.2.1";
});
我们知道 , 在 .NET Core 里依赖注入被提升到了一等公民的位置 , 可谓是无处不在 。 当我们在 IoC 容器中注入LearningOptions以后 , 就可以在服务层或者控制器层直接使用它们 , 此时 , 我们就会遇到传说中的 Options 三剑客 , 即IOptions<TOptions>、IOptionsSnapshot<TOptions>和IOptionsMonitor<TOptions> 。 关于它们三个的区别 , 官方文档里给出了详细的说明:
- IOptions:生命周期为 Singleton , 在应用启动时完成初始化 。 应用启动后 , 对配置的修改是非响应式的 。
- IOptionsSnapshot:生命周期为 Scoped , 每次请求时会重新计算选项 。 应用启动后 , 对配置的修改是响应式的 。
- IOptionsMonitor:生命周期为 Singleton , 可以随时检索当前配置项 。 应用启动后 , 对配置的修改是响应式的 。
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
private readonly IOptions<LearningOptions> _learningOptions;
private readonly IOptionsSnapshot<LearningOptions> _learningOptionsSnapshot;
private readonly IOptionsMonitor<LearningOptions> _learningOptionsMonitor;
private readonly IConfiguration _configuration;
public WeatherForecastController(ILogger<WeatherForecastController> logger,
IOptions<LearningOptions> learningOptions,
IOptionsSnapshot<LearningOptions> learningOptionsSnapshot,
IOptionsMonitor<LearningOptions> learningOptionsMonitor,
IConfiguration configuration
)
{
_logger = logger;
_learningOptions = learningOptions;
_learningOptionsSnapshot = learningOptionsSnapshot;
_learningOptionsMonitor = learningOptionsMonitor;
_configuration = configuration;
_learningOptionsMonitor.OnChange((options, value) =>
{
_logger.LogInformation($"OnChnage => {JsonConvert.SerializeObject(options)}");
});
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- |“增长”成娱乐营销必考题,酷营销-CBD模型为最佳选项?
- 苹果笔记本|苹果首款基于自研ARM处理器的MacBook Pro发布 同样采用M1芯片
- |基于Android 11:OPPO Ace2迎ColorOS 11正式版升级
- ColorOS|基于安卓11的ColorOS 11正式版面向Ace2系列推送
- CSDN|小霸王被申请破产重整;虎牙员工自曝被HR抬出公司;Office 2010被微软终止服务|极客头条
- |Kornia开源可微分计算机视觉库,基于Pytorch
- CSDN|可以“作为医生”的 GPT-3,究竟是炒作还是名副其实?
- |再加码社区团购,滴滴的野心从来不止于出行
- CSDN|对话指令集创始人兼CEO潘爱民:面向未来的新型物联网操作系统 | 人物志
- CSDN|给 JDK 报了一个P4 的 Bug,结果居然……