zoukankan      html  css  js  c++  java
  • ABP源码分析二十一:Feature

    Feature是什么?Feature就是对function的分类方法,其与function的关系就比如Role和User的关系一样。

    ABP中Feature具有以下属性: 其中最重要的属性是name,用以表示feature的Identity,一个feature一个name. 一个Feature可以有一组子Features,从而构成Feature树。

     

     

    FeatureDictionary: 其本身继承自Dictionary。其作用就是把一个Feature及其Child Features从树状结构加载加到Dictionary结构中(扁平化)。

     

    IFeatureDefinitionContext/FeatureDefinitionContextBase : 这组接口和抽象类提供管理FeatureDictionary的方法, 新建一个feature到FeatureDictionary中,和根据 name从 FeatureDictionary返回一个feature. 他们是Feature Manager的基类

     

    IFeatureManager:该接口定义根据name返回Feature的一些方法

     

    FeatureManager:通过调用继承自FeatureDefinitionContextBase中的方法来实现IFeatureManager中定义的方法。这个FeatureManager起到了一个类似适配器的作用,把IFeatureDefinitionContext适配成IFeatureManager。FeatureManager的另一个作用是初始化FeatureDictionary(其Features属性)。

     

    FeatureProvider: 抽象基类,用于向IFeatureDefinitionContext对象(FeatureManager)中添加Feature. Abp框架只提供了抽象类,下面代码是一个简单的示例。实际项目中可以创建自定义FeatureProvider来从数据库中读取feature来填充到FeatureManager对象中。

     

    IFeatureConfiguration/FeatureConfiguration: FeatureManager通过具体的FeatureProvider来初始化FeatureDictionary(其Features属性)。但是ABP核心模块处于项目的最底层,怎么能知道上层定义的FeatureProvider的类型呢? FeatureConfiguration 为解决这个问题引入了FeatureProvider配置项。FeatureProvider就是一个Type 列表 (ITypeList<FeatureProvider>),注意是FeatureProvider的Type,不是实例。在需要FeatureProvider的地方,可以使用容器根据Type构造出实例。

     

     

    IFeatureChecker/FeatureChecker: 提供检查特定的feture对于特定的tenant是否可用。首先FeatureChecker 根据Feature Name通过FeatureManager获取Featue,然后通过从IFeatureValueStore对象根据Feature Name和tenantId获取Feature的value值。 然后判断value是否为“true”.

     

     

    IFeatureValueStore: 接口定义了获取Feature值的方法。FeatureValueStore需要在子模块中实现。因为feature往往是存放在数据库中的。所以Abp底层框架是不会包含对数据库有依赖的逻辑.该接口已经完全实现在了 module-zero项目中。如果没有实现该接口,那么默认会使用NullFeatureValueStore对所有的功能返回null(此时使用默认的功能值)。

     

    FeatureInterceptorRegistrar:用于给标注了RequiresFeatureAttribute特性的对象注册FeatureInterceptor拦截器。由AbpKernelModuel调用。

     

    FeatureInterceptor:执行拦截器的逻辑,主要是IFeatureChecker完成feature的检查。一个标准的Castle 拦截器。

     

     

    IFeatureDependency/SimpleFeatureDependency:如果某项功能要先进行feature检查,可以加上一个IFeatureDependency属性。IFeatureDependency对象通过调用IFeatureChecker对象完成真正的检查。具体用例,可查看MenuItemDefinition和UserNavigationManager的用法。

    IFeatureDependencyContext/FeatureDependencyContext: 这个上下文类封装了IFeatureChecker 和 IResolver对象。被用于方法的形参。

     

     

    MenuItemDefinition

     

     

    UserNavigationManager

     

    返回ABP源码分析系列文章目录

  • 相关阅读:
    Windows修改MySQL用户root密码
    ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
    DM8 HUGE表使用小技巧
    DEM 安装部署
    【.NET 框架】—— Dapper框架的高级应用(二)
    JWT理论理解
    SqlServer使用表变量或临时表遍历数据
    NPOI Excel Helper
    Celery异步分布队列
    Django-Admin和第三方插件Xadmin
  • 原文地址:https://www.cnblogs.com/1zhk/p/5351968.html
Copyright © 2011-2022 走看看