ABP框架中存在一个Feature的特性,功能和设计思路非常类似于框架中的Authorization功能,都是来控制用户是否能够继续操作某项功能,不同点在于Authorization默认是应用在IApplicationService上控制用户或者其所属租户是否具有权限访问服务,而Feature应用更为广泛可以控制访问任意类型,但是控制方式更为单纯只有开关(Enable或者Disable),而且是无法控制具体用户的,只能是某些指定的全局范围内。注意Feature也是有父子关系的,只有父Feature可用,子Feature才有意义。

  如上所述所有的父Feature主要开和关两种值,所以为了简单起见,父Feature有"true"和"false"两个字符串为可能值,定义一个Feature特别简单,在任何地方定义一个继承自FeatureProvider的类型,并重写

void SetFeatures(IFeatureDefinitionContext context)

方法,在方法体中调用IFeatureDefinitionContext的Create方法创建一个Name具有唯一性的Feature。在任意一个自定义的AbpModule类中通过StartupConfiguration引用到FeatureConfiguration,FeatureConfiguration的Providers属性就是用来注册所有FeatureProvider的

internal class FeatureConfiguration : IFeatureConfiguration
{
public ITypeList<FeatureProvider> Providers { get; private set; } public FeatureConfiguration()
{
Providers = new TypeList<FeatureProvider>();
}
}

在系统启动阶段会使用Ioc容器实例化一个单例的FeatureManager,调用其void Initialize()方法将FeatureConfiguration中存储的所有FeatureProvider类型注册到FeatureManager实例所包含的的一个字典变量中,同时会递归的将Feature自身的子Feature包含到字典中。后面所有需要Check Feature的时候都可以通过FeatureManager的实例根据Feature的具有唯一性的Name获得指定的Feature从而判断是否启用。

  定义并注册一个Feature很简单,在项目中使用Feature也同样很简单,之前的博文中提到框架中有一个FeatureInterceptorRegistrar的静态类型,在最核心的AbpKernelModule中会调用其Initialize()方法使得可以监听Ioc容器注册新类所触发的事件,是的,所注册的处理逻辑会判断Ioc新注册的类型或者其任意的方法是否应用了RequiresFeatureAttribute,如果有就会添加一个FeatureInterceptor的拦截器,在Target逻辑被执行之前,FeatureInterceptor会获取Target上RequiresFeatureAttribute中所指定必须处于开启状态的Feature集合(可以要求必须全部处于开启或任意一个开启),只有Feature Check Ok了,才会执行真正的逻辑,否则只会报异常。

ABP框架详解(四)Feature的更多相关文章

  1. ABP框架详解(五)Navigation

    ABP框架中的Navigation功能用于管理业务系统中所有可用的菜单导航控件,通常在业务系统的首页会有一个全局性的导航菜单,JD商城,天猫,猪八戒网莫不如是.所以为方便起见,Navigation功能 ...

  2. ABP框架详解(八)动态ApiController的生成和访问机制

    在ABP框架中提供了一套动态生成ApiController的机制(依然支持原生ApiController的使用方式),虽然说是动态生成ApiController但是实际上并没有真正在启动程序的时候生成 ...

  3. ABP框架详解(七)Caching

    在ABP框架中存在一个缓存机制,使用ICache的继承类来存储最终需要缓存的数据,可以吧ICache看成一个字典对象,使用Key作为真实数据的具有唯一性的表示.使用上与字典对象完全相同,Get方法传递 ...

  4. ABP框架详解(三)Domain

    此处的Domain主要指Abp类库根目录下Domain文件夹.顾名思义该目录下是用来存放与领域实体,领域逻辑执行,存储,领域服务相关的内容. 1.Entities (1)为整个Abp框架后期开发的所有 ...

  5. ABP框架详解(二)AbpKernelModule

    AbpKernelModule类是Abp框架自己的Module,它也跟所有其他的Module一样继承自AbpModule,重写PreInitialize,Initialize,PostInitiali ...

  6. ABP框架详解(一)ABPBootstrapper

    在ABP框架的AbpBootstrapper主要用于框架的基本配置的注册和初始化,在Web应用启动阶段实例化一个AbpBootstrapper并调用Initialize方法初始化,该类主要包含两个公有 ...

  7. ABP框架详解(六)Aspects

    这种AOP式的设计非常类似于Asp.net MVC和WebApi中过滤器(Filter)机制,感觉没有太多可讲述的,只能谈谈设计思路. 框架中AspectAttribute特性用于设置到需要被拦截的T ...

  8. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  9. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

随机推荐

  1. android studio serialversionuid设置

  2. jQuery Mobile 列表视图(带有自动检索)

    输入a: 输入b: jQuery Mobile 列表视图 jQuery Mobile 中的列表视图是标准的 HTML 列表:有序列表 (<ol>) 和无序列表 (<ul>). ...

  3. servlet总结

    什么是Servlet Tomcat容器等级 手工编写第一个Servlet 使用MyEclipse编写Servlet Servlet生命周期 Servlet常用对象,且与Jsp九大内置对象的关系 Ser ...

  4. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  5. Iscroll解析

    做了一些移动端的产品,发现一些滚动效果很多会使用 iscroll 作为底层库(如阿里小蜜).iscroll 的文档已经好久没更新了,而且比较简单,经常需要直接读源码.这里写一篇总结,作为对 iscro ...

  6. 《CODE》读后笔记——第14~20章

    14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...

  7. hdoj 2034 人见人爱A-B

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...

  8. k次出现与一次出现的数字

    原始的题目是这样的: Single Number II Given an array of integers, every element appears three times except for ...

  9. MSBuild Devenv 编译VC 工程

    Devenv "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" dap_cp ...

  10. hdu 1342(DFS)

    Lotto Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...