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源码分析四十六:ABP ZERO中的Ldap模块

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

  2. 【转】ABP源码分析四十五:ABP ZERO中的EntityFramework模块

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

  3. 【转】ABP源码分析四十四:ZERO的配置

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

  4. 【转】ABP源码分析四十二:ZERO的身份认证

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

  5. ABP源码分析四十:ZERO的Application和Tenant

    ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...

  6. ABP源码分析四十七:ABP中的异常处理

    ABP源码分析四十七:ABP中的异常处理 参考文章: (1)ABP源码分析四十七:ABP中的异常处理 (2)https://www.cnblogs.com/1zhk/p/5538983.html (3 ...

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

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

  8. 【转】ABP源码分析三十四:ABP.Web.Mvc

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

  9. 【转】ABP源码分析二十四:Notification

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

最新文章

  1. Six Basic Functional Areas of Spring
  2. Delphi读写二进制文件
  3. 虚拟机从网卡路由问题
  4. 其他电子计算机配套产品及耗,F-商品和服务税收分类编码-.xls
  5. ModuleNotFoundError No module named urllib2
  6. GAN里面的Kullback-Leibler Divergence和Jensen–Shannon Divergence
  7. 黑群晖nas安装保姆级教程
  8. Java项目——细胞自动机
  9. 微信公众号的使用方法
  10. deepin显卡驱动管理器在哪_deepin显卡设置
  11. 物流管理过程中如何避免客户个人隐私信息泄露
  12. Python 爬取手机 豆果美食app存Mongodb
  13. 10. Linux驱动 - Ubuntu驱动签名
  14. meethigher-逆向破解今日校园App加密值
  15. SWUST大二周赛 之农夫山泉有点甜
  16. Java HotSpot(TM) 64-Bit Server VM warning:
  17. BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】
  18. 在docker里跑gpgpusim
  19. 十一、高斯混合模型(Gaussian Mixed Model, GMM)
  20. 二维数组(矩阵)顺时针旋转90°

热门文章

  1. spring----Bean的生命周期和循环依赖
  2. centos安装多个tomcat
  3. delphi下实现ribbon界面的方法(一)
  4. iframe 自适应高度 跨域
  5. 博士期间要注意的几个问题
  6. pytorch自定义模型执行过程
  7. [Leedcode][JAVA][第1431题][拥有糖果最多的孩子][暴力][六一儿童节]
  8. mysql合并多条纪录字段_Mysql应用mysql合并多条记录的单个字段去一条记录编辑
  9. sql空字符串判断函数_access常用的内置函数
  10. 计算机网络项目实训教程课后答案,计算机网络项目实训教程