ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting management, language management, audit logging等核心功能。ABP中的这些功能具体实现都依赖外部的持久层,所以ABP框架中仅仅定义了接口和一些空的实现。而对这些功能真正的实现则交给Zero这类模块。

Zero模块主要的代码也很简单,就是针对这些功能模块的领域逻辑的实现,所以无非就是定义实体,实体关系,以及相关的CRUD操作。

Edition:继承自FullAuditedEntity实体类。表示一个application的版本。下图表示其去另外两个Entity的关系。

EditionFeatureSetting:继承自FeatureSetting。表示一个与具体Edition关联的Feature

FeatureSetting:继承自CreationAuditedEntity<long>的实体类。  封装了FeatureSetting的name和value

AbpTenant:继承自FullAuditedEntity实体类。表示Tenant.

AbpEditionManager:处理与Edition相关的邻域逻辑。其引用了两个对象:EditionRepository 和EditionFeatureRepository(IRepository<Edition>和 IRepository<EditionFeatureSetting, long> 的实例,图中用红色标注)。AbpEditionManager通过EditionRepository 实例完成Edition的CRUD操作,通过EditionFeatureRepository完成EditionFeatureSetting 实例的CRUD操作。

这里要注意AbpEditionManager实例了两个事件处理器的接口,用于响应Edition以及EditionFeatureSetting发生改变时触发的事件。这边的具体事件处理函数完成将Edition以及EditionFeatureSetting实例从缓存中删除。

EditionfeatureCacheItem:这个类实例被用于缓存,其字典集合FeatureValues用于保存与某个edition对应的FeatureSetting。

AbpFeatureValueStore:这是一个抽象基类。其提供了一个方法GetValueOrNullAsync根据tenant的指定feature的值。该方法内部是通过调用AbpTenantManager的实例来完成的。如果feature和edition相关,还需要调用AbpEditionManager的相应方法来获取feature的value.

TenantFeatureSetting:继承自FeatureSetting。表示一个与具体Tenant关联的Feature

TenantFeatureCacheItem:与EditionfeatureCacheItem相似。这个类实例被用于缓存,其字典集合FeatureValues用于保存与某个Tenant对应的FeatureSetting。

TenantFeatureCacheItemInvalidator:实现了IEventHandler接口中的HandleEvent方法,以相应TenantFeatureSetting实体对象发生变化时,将其从缓存中删除。

IMustHaveTenant:该接口标识其Entity与tenant有关联关系,但是这关联关系是必须的。

IMayHaveTenant :该接口标识其Entity与tenant有关联关系,但是这关联关系不是必须的。

AbpTenantManager:处理与Tenant相关的邻域逻辑。其引用了两个对象:TenantRepository 和TenantFeatureRepository(IRepository<Tenant>和 IRepository<TenantFeatureSetting, long> 的实例,图中用红色标注)。AbpEditionManager通过TenantRepository 实例完成Tenant的CRUD操作,通过TenantFeatureRepository完成TenantFeatureSetting 实例的CRUD操作。

这里要注意AbpTenantManager实例了两个事件处理器的接口,用于响应Tenant以及Edition发生改变时触发的事件。这边的具体事件处理函数完成将Tenant以及EditionFeatureSetting实例从缓存中删除。

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

ABP源码分析四十:ZERO的Application和Tenant的更多相关文章

  1. ABP源码分析四十二:ZERO的身份认证

    ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展.同时重写了ABP核心模块中的permission功能,以实现 ...

  2. ABP源码分析四十四:ZERO的配置

    ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...

  3. ABP源码分析四十五:ABP ZERO中的EntityFramework模块

    AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...

  4. ABP源码分析四十六:ABP ZERO中的Ldap模块

    通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...

  5. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  6. ABP源码分析二十四:Notification

    NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...

  7. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  8. ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

  9. ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

随机推荐

  1. 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)

    上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html 对抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久. 但简单. ...

  2. 一个免费的、跨平台的、开源音频编辑器Audacity

    Audacity 是一个免费的开源程序,用于编辑音频录制.它可在多个平台(windows/linux)上运行.Audacity 基于 GUI,是一个具有多种选项的强大程序.它支持您录制各种类型的声音. ...

  3. OpenCASCADE Job - dimue

  4. 前端制作动画的几种方式(css3,js)

    制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...

  5. CSS 3学习——transform 2D转换

    首先声明一点,transform属性不为none的元素是它的定位子元素(绝对定位和固定定位)的包含块,而且对内创建一个新的层叠上下文. 注意:可以通过 transform-box 属性指定元素的那个盒 ...

  6. JQuery中的siblings()是什么意思

    jQuery siblings() 方法返回被选元素的所有同胞元素,并且可以使用可选参数来过滤对同胞元素的搜索. 实例演示:点击某个li标签后将其设置为红色,而其所有同胞元素去除红色样式. 1.创建H ...

  7. BPM与 SAP & Oracle EBS集成解决方案分享

    一.需求分析 SAP和Oracle EBS都是作为全球顶级的的ERP产 品,得到了众多客户的青睐.然而由于系统庞大.价格昂贵以及定位不同,客户在实施过程中经常会面临以下困惑: 1.SAP如何实现&qu ...

  8. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  9. Webpack+React+ES6开发模式入门指南

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  10. ASP.NET MVC Model元数据(三)

    ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...