功能管理模块
功能管理模块实现了由功能系统定义的IFeatureManagementStore接口。
本文档仅介绍将功能值持久化到数据库的功能管理模块。有关功能系统的更多信息,请参阅功能文档。
安装方法
该模块已预装为NuGet/NPM包。您可以继续将其作为包使用并轻松获取更新,也可以将其源代码包含到您的解决方案中(参见 get-source CLI 命令)以开发自定义模块。
源代码
该模块的源代码可在 此处 访问。源代码采用 MIT 许可,因此您可以自由使用和自定义它。
用户界面
功能管理对话框
功能管理模块提供了一个可重用的对话框来管理对象相关的功能。例如,租户管理模块使用它在租户管理页面中管理租户功能。
当您为租户点击操作 -> 功能时,功能管理对话框将打开。以下是一个包含两个已定义功能的对话框示例截图:
在此对话框中,您可以为租户启用、禁用功能或设置功能值。
IFeatureManager
IFeatureManager是该模块提供的主要服务。它用于在多租户应用程序中读取和更改租户的设置值。IFeatureManager通常由功能管理对话框使用。但如果您需要设置功能值,也可以注入该服务。
如果您只想读取功能值,请使用功能文档中说明的
IFeatureChecker。
示例:获取/设置租户的功能值
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.FeatureManagement;
namespace Demo
{
public class MyService : ITransientDependency
{
private readonly IFeatureManager _featureManager;
public MyService(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
public async Task SetFeatureDemoAsync(Guid tenantId, string value)
{
await _featureManager
.SetForTenantAsync(tenantId, "Feature1", value);
var currentValue = await _featureManager
.GetOrNullForTenantAsync("Feature1", tenantId);
}
}
}
功能管理提供程序
功能管理模块与功能系统一样是可扩展的。您可以通过定义功能管理提供程序来扩展它。系统预置了3个功能管理提供程序,按以下顺序注册:
DefaultValueFeatureManagementProvider:从功能定义的默认值获取值。由于默认值是在功能定义中硬编码的,因此无法设置默认值。EditionFeatureManagementProvider:获取或设置版本的功能值。版本是一组分配给租户的功能集合。版本系统尚未由租户管理模块实现。您可以自行实现或购买ABP的SaaS模块,该模块实现了版本系统并提供了更多SaaS功能,如订阅和支付。TenantFeatureManagementProvider:获取或设置租户的功能值。
IFeatureManager在get/set方法中使用这些提供程序。通常,每个功能管理提供程序都会在IFeatureManager服务上定义扩展方法(例如租户功能管理提供程序定义的SetForTenantAsync)。
如果您想创建自己的提供程序,请实现IFeatureManagementProvider接口或继承FeatureManagementProvider基类:
public class CustomFeatureProvider : FeatureManagementProvider
{
public override string Name => "Custom";
public CustomFeatureProvider(IFeatureManagementStore store)
: base(store)
{
}
}
FeatureManagementProvider基类为您提供了默认实现(使用IFeatureManagementStore)。您可以根据需要重写基类方法。每个提供程序必须具有唯一名称,本示例中为Custom(请保持简短,因为每个功能值记录都会将其保存到数据库中)。
创建提供程序类后,您应该使用FeatureManagementOptions选项类注册它:
Configure<FeatureManagementOptions>(options =>
{
options.Providers.Add<CustomFeatureProvider>();
});
提供程序的顺序很重要。提供程序按逆序执行。这意味着在此示例中CustomFeatureProvider将首先执行。您可以在Providers列表中以任意顺序插入提供程序。
抠丁客




