.NET 5 FeatureManagement 功能开关的使用

.NET 5 FeatureManagement 功能开关的使用

Microsoft.FeatureManagement 组件可以优雅的在 .NET 5 应用程序内添加功能开关

下文将以 ASP.NET MVC 应用程序模板为例,简单的展示组件的使用方法

环境

  • Windows 10 2004
  • Visual Studio 2019
  • .NET 5

参考

实例

环境准备

  1. 首先需要在项目中引入 Microsoft.FeatureManagement.AspNetCore 包,使用 Nuget 的 CLI/ VS GUI 即可.NET 5 FeatureManagement 功能开关的使用
  2. 在 appsettings.json 中添加 FeatureManagement 的配置项
    {
      //...
      "FeatureManagement": {
        //添加配置项
      }
      //...
    }

    我的配置如下.NET 5 FeatureManagement 功能开关的使用

  3. 在项目内加入用于读取开关状态的枚举类
    public enum FeatureFlags { 
        //...
        //枚举个数对应 appsettings 中的配置项
        //...
    }

    注意枚举类内变量个数应对应 appsettings 中配置项的个数,枚举类内的变量名称对应 appsettings 中的配置项名称

  4. 编辑 Startup.cs 添加 FeatureManagement 服务
    using Microsoft.FeatureManagement; //引用
    
    namespace FeatureFlagTest {
        public class Startup {
            //...
            public void ConfigureServices(IServiceCollection services) {
                //...
                services.AddFeatureManagement();
                //...
            }
            //...
        }
    }

MVC Action Controller

if-else 判断式

  1. 依赖注入 featureManager 实例
    using Microsoft.FeatureManagement;//引入
    
    namespace FeatureFlagTest.Controllers {
        public class HomeController : Controller {
            private readonly IFeatureManager _featureManager;
    
            public enum FeatureFlags { 
                EnableTestPage,
                EnablePrivacyPage
            }
    
            public HomeController(IFeatureManager featureManager) {
                //...
                _featureManager = featureManager;
            }
            //...
        }
    }
  2. 编辑 Action 内部代码
    public async Task<IActionResult> Test() {
        if (await _featureManager.IsEnabledAsync(nameof(FeatureFlags.EnableTestPage)))
            return View();
        else return RedirectToAction("Error"); //如果没有开启 Test 页面,则重定向到 Error 页面
    }

效果

在 appsettings 中设置 EnableTestPage 为 true.NET 5 FeatureManagement 功能开关的使用

关闭 EnableTestPage 后,访问 Test 页面,会被重定向到 Error 页面.NET 5 FeatureManagement 功能开关的使用

FeatureGate 属性

无需依赖注入,直接在 Action 或 Controller 方法前添加 FeatureGate 属性,如下代码

using Microsoft.FeatureManagement.Mvc; //引入

[FeatureGate(FeatureFlags.EnableTestPage)]
public IActionResult Test() {
    return View();
}

[FeatureGate(FeatureFlags.EnablePrivacyPage)]
public IActionResult Privacy() {
    return View();
}

效果

EnablePrivacyPage 设置为 true 时.NET 5 FeatureManagement 功能开关的使用

EnablePrivacyPage 设置为 false 时.NET 5 FeatureManagement 功能开关的使用

MVC View

FeatureManagement 也可以实现显示或者隐藏视图页面信息

步骤

  1. 添加 appsettings 配置项.NET 5 FeatureManagement 功能开关的使用
  2. 编辑 _ViewImports.cshtml 文件,引入 FeatureManagement
    //...
    @addTagHelper *, Microsoft.FeatureManagement.AspNetCore
    //...

    .NET 5 FeatureManagement 功能开关的使用

  3. 在 Razor 视图文件中使用 <feature> 标签
    @{
        ViewData["Title"] = "Test Page";
    }
    <h1>@ViewData["Title"]</h1>
    <p>
        This is a test message!!
    </p>
    <feature name="EnableHiddenMessages">
        <p style="color:cyan">This is a hidden message</p>
    </feature>
    

效果

设置 EnableHiddenMessages 为 false,访问 Test 页面.NET 5 FeatureManagement 功能开关的使用

设置 EnableHiddenMessages 为 true,访问 Test 页面.NET 5 FeatureManagement 功能开关的使用

结语

Microsoft.FeatureManagement 还有其他更高级的用法,比如设置一个功能开关的概率,添加中间件开关等等,以上示例只是其在 ASP.NET Core 下的两种简单应用,详情可以查看参考链接中的 MSDN

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据