项目

功能管理模块

功能管理模块实现了由功能系统定义的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列表中以任意顺序插入提供程序。

另请参阅

在本文档中