<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3432字,需瀏覽 7分鐘

           ·

          2021-01-06 20:56


          .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)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時任務管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務輕松實現(xiàn)作業(yè)調度

          現(xiàn)身說法:實際業(yè)務出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關于C#異步編程你應該了解的幾點建議

          C#異步編程看這篇就夠了


          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产野外在线播放 | 国产一级片操逼视频 | 中文字幕亚洲在线观看 | 久久夜色精品国产噜噜亚洲AV | 天天舔天天插 |