用法:修改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("另一个返回");
}
}
}
}