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)}"); });
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ColorOS|基于安卓12开发!一加8系列终于迎来ColorOS 12公测:正式发布只差一步
- 苹果|苹果忍无可忍!逼用户升级iOS 15:取消留在iOS 14选项
- 丰田|缩小版埃尔法 全新丰田Noah/Voxy官图发布:基于TNGA打造
- 小米|MIUI 13全球升级计划公布:19款设备、全部基于安卓12
- 小米12|刷机方便了!小米12全系内核源码公布:基于Android 12
- 华为|长安C385首台全工装样车下线!基于长安/华为/宁德时代CHN平台打造
- 智能手机|雷军:小米12基于手感和体验设计 不简单拼参数堆配置
- 奥迪|基于纯电平台打造 奥迪三款新车将国产:含“电动版”A6L
- 苹果|苹果“性价比”显示器要来!基于24寸iMac设计 价格更便宜
- CPU处理器|RISC-V架构国产芯片10连发:4款基于阿里平头哥玄铁内核
