net core FeatureManagement 热更新 功能开关

用法:修改json中的值,不用重启webserver就可以让配置生效

appsettings.json中的配置

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "FeatureManagement": {
    "EnableAudit": false,
    "EnableWebApi": true
  }
}

设置一个枚举

public enum FeatureFlags
{
		EnableWebApi,
		EnableAudit
}

start up 中的处理

public void ConfigureServices(IServiceCollection services)
{
		//services.AddRazorPages();

		//services.AddMvc(options=>
		//{
		//    options.Filters.AddForFeature<SomeMvcFilter>(nameof(FeatureFlags.EnableWebApi));

		//});
		services.AddFeatureManagement();

}

工具功能粒度控制开关

namespace FeatrueFlagsDemo
{
    //controller基本的功能开关
    [FeatureGate(FeatureFlags.EnableWebApi)]
    public class HomeController : Controller
    {

        private readonly IFeatureManager _featureManager;

        public HomeController(IFeatureManager featureManager)

        {

            _featureManager = featureManager;

        }


        public IActionResult Index()
        {
            return View();
        }

        //action级别的功能开关
        [FeatureGate(FeatureFlags.EnableAudit)]
        public async Task<IActionResult> Test()
        {
            //从DI中取出功能开关的值
            if (await _featureManager.IsEnabledAsync(nameof(FeatureFlags.EnableWebApi)))

            {

                // 执行代码  
                return Content("已经启用了EnableWebApi");

            }
            else
            {
                return Content("另一个返回");
            }

        }
    }
}


作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1