點擊上方藍字關注「汪宇傑博客」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
無廣告,不賣課,作純粹的技術公衆號
喜歡本篇內容請點個在看