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

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

导语github

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

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

FeatureFilter
博客

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

配置文件io

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

"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

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

喜欢本篇内容请点个在看

相关文章
相关标签/搜索