.NET应用如何优雅的实现功能定时开关
點(diǎn)擊上方藍(lán)字關(guān)注“汪宇杰博客”
導(dǎo)語
我們?cè)诖蚬さ臅r(shí)候,總能遇到一種類型的需求:“我想要這個(gè)活動(dòng)廣告在雙11期間才顯示”,“我想要這個(gè)API在20號(hào)以后才開放”,可能你覺得這個(gè)需求沒什么難的,寫個(gè)時(shí)間判斷不就行了?但是這么做并不優(yōu)雅,如果你的系統(tǒng)里有諸如此類的其他功能也需要時(shí)間段控制,那么你的代碼將像咖喱????一樣涂滿廁所。今天分享一個(gè)優(yōu)雅的小技巧,可以不寫任何 if,動(dòng)態(tài)靈活的配置功能定時(shí)開關(guān)。
本文的內(nèi)容是對(duì)前篇《.NET 應(yīng)用如何優(yōu)雅的做功能開關(guān)》的補(bǔ)充。因此請(qǐng)先閱讀前文,了解相關(guān)庫的用法。
FeatureFilter
FeatureManagement 庫提供了兩種 Filter:百分比(Percentage)、時(shí)間窗口(TimeWindow)。我們這里使用的就是 TimeWindowFilter。
配置文件
之前我們的功能開關(guān)只是簡(jiǎn)單的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"
? ? ? ? }
? ? ? }
? ? ]
? }
}
我定義了一個(gè)名為 Fubao 的功能,讓它在 GMT 時(shí)間 2020年11月20日到11月30日之間打開。
依賴注入
之前我們不使用 Filter 的時(shí)候,DI 里只要加入下面這行代碼就可以了。
services.AddFeatureManagement();
為了使用 Filter,我們現(xiàn)在還得加上對(duì)應(yīng)的 Filter 類型。例如此處的 TimeWindowFilter 類型。
services.AddFeatureManagement().AddFeatureFilter<TimeWindowFilter>();
樣例視圖
Feature 的用法和之前沒有區(qū)別,在視圖里仍然可以用 taghelper,例如:
<feature name="Fubao">
? ? <p>年輕的時(shí)候不996,什么時(shí)候可以?</p>
</feature>
今天是11月21日,程序運(yùn)行起來后,符合顯示條件。
如果我們把時(shí)間段改到今天之前,福報(bào)就消失了。
在 Controller / Action 以及代碼里用 Feature 開關(guān)的方法見前文。
小提示
由于 TimeWindow 的時(shí)間屬性是 DateTimeOffset? 類型的,因此我們沒法配置具體時(shí)區(qū)(如中國 CST)的時(shí)間,必須人肉轉(zhuǎn)換為 GMT 時(shí)間才行。
當(dāng)然,如果你愿意自己996實(shí)現(xiàn)一個(gè)帶時(shí)區(qū)的 Filter,可以參考微軟開源代碼:
https://github.com/microsoft/FeatureManagement-Dotnet/tree/main/src/Microsoft.FeatureManagement/FeatureFilters
汪宇杰博客
Azure | .NET |?微軟 MVP
無廣告,不賣課,做純粹的技術(shù)公眾號(hào)
喜歡本篇內(nèi)容請(qǐng)點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的.NET应用如何优雅的实现功能定时开关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: netcore一键部署到linux服务器
- 下一篇: 2020了,最流行的密码依旧是12345