如何在 ASP.NET Core 中 使用 功能開關

.NET Core 中的?功能管理 (Feature Management)?包可用于實現(xiàn)?功能開關,什么意思呢?就是可以通過?功能開關?特性動態(tài)的改變應用程序的行為而不需要改變任何的業(yè)務邏輯代碼,聽起來是不是挺有意思,本篇我們就來討論如何使用這個包。
安裝 Feature Management 包
要想使用?功能管理,需要通過 NuGet 安裝?Microsoft.FeatureManagement.AspNetCore,可通過 Visual Studio 2019 下的 NuGet Package Manager 可視化管理界面 或者 通過 .NET CLI 命令行工具輸入如下命令。
dotnet?add?package?Microsoft.FeatureManagement.AspNetCore
在 ASP.NET Core 中添加
為了能夠在項目中用上?功能管理,需要在?Startup.ConfigureServices?方法下進行 service 注入,如下代碼所示:
????public?class?Startup
????{
????????//?This?method?gets?called?by?the?runtime.?Use?this?method?to?add?services?to?the?container.
????????public?void?ConfigureServices(IServiceCollection?services)
????????{
????????????services.AddControllersWithViews();
????????????services.AddFeatureManagement();
????????}
????}
有一點要注意:功能管理?中的?功能開關?讀取的值來自于 .NET Core 中的配置文件,如果你想讓?功能開關?的值來源于 Configuration 文件的不同節(jié)點,必須在 service 注冊時單獨指定一下,如下代碼所示:
????public?void?ConfigureServices(IServiceCollection?services)
????{
????????services.AddFeatureManagement(options?=>
????????{
????????????options.UseConfiguration(Configuration.GetSection("IDGFeatureFlags"));
????????});
????}
在 controller 中使用 功能管理
為了能夠在 Controller 中用上?功能管理(feature management),需要通過依賴注入的方式將其注入到 Controller 中,如下代碼所示:
public?class?HomeController?:?Controller
{
????????private?readonly?ILogger?_logger;
????????private?readonly?IFeatureManager?_featureManager;
????????public?HomeController(ILogger?logger,?IFeatureManagerSnapshot?featureManager )
????????{
????????????_logger?=?logger;
????????????_featureManager?=?featureManager;
????????}
}
接下來在?appsettings.json?配置文件中定義一個名為?FeatureManagement?節(jié)點,文件內容參考如下:
{
??"Logging":?{
????"LogLevel":?{
??????"Default":?"Information",
??????"Microsoft":?"Warning",
??????"Microsoft.Hosting.Lifetime":?"Information"
????}
??},
??"FeatureManagement":?{
????"DbLogger":?"true"
??},
??"AllowedHosts":?"*"
}
使用 FeatureGate特性 管控 功能開關
可以使用?FeatureGate?特性來 管控 Action 方法是否可以被執(zhí)行,什么意思呢?先看如下代碼。
????public?class?HomeController?:?Controller
????{
????????private?readonly?ILogger?_logger;
????????private?readonly?IFeatureManager?_featureManager;
????????public?HomeController(ILogger?logger,?IFeatureManagerSnapshot?featureManager )
????????{
????????????_logger?=?logger;
????????????_featureManager?=?featureManager;
????????}
????????[FeatureGate("DbLogger")]
????????public?IActionResult?Index()
????????{
????????????return?View();
????????}
????}
可以看到, Index 方法標注了?[FeatureGate("DbLogger")]?特性,這里面的?DbLogger?就是 appsettings.json 中的 DbLogger 節(jié)點的值,當值為 True 時,這個 Index 方法是可以被 HttpGet 所請求的,如下圖:

當值為 False 時,這個 Index 方法將會拋出 404 錯誤,是不是很有意思哈,如下圖所示:
{
??"Logging":?{
????"LogLevel":?{
??????"Default":?"Information",
??????"Microsoft":?"Warning",
??????"Microsoft.Hosting.Lifetime":?"Information"
????}
??},
??"FeatureManagement":?{
????"DbLogger":?"false"
??},
??"AllowedHosts":?"*"
}

用法就是這么一個用法,可以看到 .NET Core 對?功能管理?提供了開箱即用的支持, 這確實是一個非常實用的特性,更多關于該 知識點 的介紹,可參考官網:https://docs.microsoft.com/en-us/azure/azure-app-configuration/use-feature-flags-dotnet-core
譯文鏈接:https://www.infoworld.com/article/3481516/how-to-use-feature-flags-in-aspnet-core.html
【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程?★★★
.NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃
【.NET Core微服務實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了
用abp vNext快速開發(fā)Quartz.NET定時任務管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務輕松實現(xiàn)作業(yè)調度
