点击上方蓝字关注“汪宇杰博客”

导语

我们在打工的时候,总能遇到一种类型的需求:“我想要这个活动广告在双11期间才显示”,“我想要这个API在20号以后才开放”,可能你觉得这个需求没什么难的,写个时间判断不就行了?但是这么做并不优雅,如果你的系统里有诸如此类的其他功能也需要时间段控制,那么你的代码将像咖喱????一样涂满厕所。今天分享一个优雅的小技巧,可以不写任何 if,动态灵活的配置功能定时开关。

本文的内容是对前篇《.NET 应用如何优雅的做功能开关》的补充。因此请先阅读前文,了解相关库的用法。

FeatureFilter

FeatureManagement 库提供了两种 Filter:百分比(Percentage)、时间窗口(TimeWindow)。我们这里使用的就是 TimeWindowFilter。

配置文件

之前我们的功能开关只是简单的true或false。要使用Filter,需要在功能名称下定义 EnabledFor。例如此处的 TimeWindow。

"FeatureManagement": {

"Fubao": {

"EnabledFor": [

{

"Name": "TimeWindow",

"Parameters": {

"Start": "11/20/2020 00:00:00 GMT",

"End": "11/30/2020 00:00:00 GMT"

}

}

]

}

}

我定义了一个名为 Fubao 的功能,让它在 GMT 时间 2020年11月20日到11月30日之间打开。

依赖注入

之前我们不使用 Filter 的时候,DI 里只要加入下面这行代码就可以了。

services.AddFeatureManagement();

为了使用 Filter,我们现在还得加上对应的 Filter 类型。例如此处的 TimeWindowFilter 类型。

services.AddFeatureManagement().AddFeatureFilter<TimeWindowFilter>();

样例视图

Feature 的用法和之前没有区别,在视图里仍然可以用 taghelper,例如:

<feature name="Fubao">

<p>年轻的时候不996,什么时候可以?</p>

</feature>

今天是11月21日,程序运行起来后,符合显示条件。

如果我们把时间段改到今天之前,福报就消失了。

在 Controller / Action 以及代码里用 Feature 开关的方法见前文。

小提示

由于 TimeWindow 的时间属性是 DateTimeOffset? 类型的,因此我们没法配置具体时区(如中国 CST)的时间,必须人肉转换为 GMT 时间才行。

当然,如果你愿意自己996实现一个带时区的 Filter,可以参考微软开源代码:

https://github.com/microsoft/FeatureManagement-Dotnet/tree/main/src/Microsoft.FeatureManagement/FeatureFilters

汪宇杰博客

Azure | .NET | 微软 MVP

无广告,不卖课,做纯粹的技术公众号

喜欢本篇内容请点个在看

.NET应用如何优雅的实现功能定时开关相关推荐

  1. Arduino项目——定时控制,手机控制Arduino实现远程开关和定时开关

    功能效果 1. 通过手机app的按键实时控制舵机转动.                                                                          ...

  2. 【锐捷无线】定时开关无线信号配置

    功能介绍 定时开关无线功能适用于那些在固定周期提供无线接入的场合.比如:某高校的教学楼只在白天上课时提供无线接入服务:某办公楼留给访客的无线网络只在工作日的上班时间开启等等.此功能可以减少网络流量,节 ...

  3. openwrt折腾记1-DDNS动态域名更新与WIFI定时开关脚本

    本来无事,因为刚得知ipv6可以直接访问内部家庭宽带,于是开始试用.移动的第三方公司,运维人员给的答复是IP公网的需要安装专线,ipv6够呛. 0x01使用ipv6拨号 首先通过他的超极用户进入光猫, ...

  4. 广告牌定时器怎么设置时间_定时开关如何设置时间呢

    路灯定时开关怎么设置定时 内容如下:1.先按取消键5秒就可解锁设置2.如果有设置,先选择,然后选择校时,校分,这个是开:3.再次按设置,校时,校分,第一组就设置完成.以此类推下去就行.4.选择自动,或 ...

  5. 腾达f3虚拟服务器设置,高手指南win7系统腾达F3路由器设置WIFI定时开关的法子

    许多win7系统用户在工作中经常需要对win7系统腾达F3路由器设置WIFI定时开关进行设置,比如近日有用户到本站反映说win7系统腾达F3路由器设置WIFI定时开关的问题,但是却不知道要怎么设置wi ...

  6. TP-LINK 720N刷了OpenWRT后LED灯定时开关

    TP-LINK 720N刷了OpenWRT后LED灯定时开关 参考链接:https://blog.wangmao.me/openwrt-timing-off-led-lights.html 因为家里有 ...

  7. PLC如何实现循环定时开关(Cycle_time_switch)

    1.smartPLC 如何实现循环定时开关子程序,我们这里讨论的是实现这样的子程序,可以多次调用,控制多个回路的循环定时开关. 2.下面直接上代码: SUBROUTINE_BLOCK SecCycli ...

  8. H3C NX30 PRO无线路由器刷OpenWRT后LED定时开关

    H3C NX30 PRO无线路由器刷OpenWRT后LED定时开关 ​ 前几天刚入手的H3C的NX30 PRO路由器做旁路由使用,跟着b站up主@酱紫表的视频[H3C NX30 Pro 超值百元路由器 ...

  9. Windows定时截屏、后台自动截屏工具,带有密码保护功能 —— 定时执行专家

    目录 一.软件简介 二.使用教程 1.软件下载 2.软件的安装方法 3.无察觉自动截屏(例如:间隔每 10分钟,执行 1次) 一.软件简介 <定时执行专家>是一款制作精良.功能强大.简单易 ...

最新文章

  1. 详解程序包管理RPM
  2. 人生第一个快速幂的题(HDU - 1097--A hard puzzle )
  3. 关于Android消息机制你所需要知道的
  4. activiti7可以两个网关连着用吗
  5. argb可以和rgb同步吗_神光同步酷炫幻彩,安钛克光棱120 RGB风扇套装
  6. 法学学士学位的完整形式是什么?
  7. 不少人暗搓搓的准备春招了,我有一些好东东和招聘信息给你
  8. 复试分数线该怎么划定呢(洛谷P1068题题解,Java语言描述)
  9. NPM 简单实用说明
  10. sdp ddp内存怎么分_小鑫课堂 | 多余的内存不要浪费,拿来做硬盘吧
  11. [Hive]-架构篇
  12. c语言回文数实验报告,C语言 · 回文数
  13. 华为软件编程规范和范例
  14. u盘文件夹变成应用程序怎么恢复?方法来了!
  15. 高级语言程序设计(c语言描述) 陆黎明 朱媛媛 练习答案,高级语言程序设计(c语言描述) 陆黎明 朱媛媛 练习答案...
  16. BZOJ-1827 [Usaco2010 Mar]gather 奶牛大集会
  17. 吊打安卓?鸿蒙OS 2,android热更新流程
  18. 嵌入式Linux驱动学习【9】—— Nor Flash
  19. Spring高手之路——深入理解与实现IOC依赖查找与依赖注入
  20. 【转】Ogitor中Gizmo的绘制技巧 - 战魂小筑 - C++博客

热门文章

  1. JQuery框架2.位置属性|筛选方法|事件
  2. 51 Nod 1670 打怪兽
  3. 实现简单的shell sed替换功能
  4. 关于电商购物车与订单
  5. *[hackerrank]Girlfriend Necklace
  6. 页面闲置一段时间后,跳转
  7. ubuntu 安装 php
  8. UVA 10518 How Many Calls?
  9. 在Windows 7中禁用或修改Aero Peek的“延迟时间”
  10. java cas volatile_每日一个知识点:Volatile 和 CAS 的弊端之总线风暴