【转】ABP源码分析四十:ZERO的Application和Tenant

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源码分析系列文章目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生命、生活:同样重要

生命是一种责任&#xff0c;生命是一个过程&#xff0c;也是一种目的。在短暂的生命历程中&#xff0c;我们必须使生命具有更高的意义。在自己有限的生命中建立起一些永恒的东西。 生命中最好的景致有时并不是用浓墨重彩描绘而成的&#xff0c;它也许只是一个淡淡的足迹&#x…

allegro标注尺寸设置_标注新升级 | SOLIDWORKS 2020新功能揭秘

在实际设计过程中&#xff0c;尺寸链在工程图尺寸标注中使用率是非常高的。尺寸链是由互相联系的尺寸按一定顺序&#xff0c;首尾相接排列而成的封闭尺寸组。常规设置方法在SOLIDWORKS之前的版本中&#xff0c;我们可以使用&#xff1a;基准尺寸、尺寸链(水平&竖直尺寸链)完…

WinCE中命令行工具cvrtbin简介

作者&#xff1a;ARM-WinCE 关于cvrtbin的用途&#xff0c;最常用的就是将NK.bin转换出NK.nb0。用法如下&#xff1a; cvrtbin [options] [filename] -s 从bin文件中产生sre文件 -r 从bin文件中产生rom文件 -a rom文件的起始地址 -w 总线的宽度 -l rom文件的大小 这个工具可…

如何选购计算机主板电池,电脑主板电池耗电太快什么原因?如何判断问题并解决?...

一般来说&#xff0c;主板其实并不是非常容易损坏的&#xff0c;但用的时间长了也会出现些小问题&#xff0c;下面小编为大家介绍电脑主板电池耗电太快什么原因&#xff1f;如何判断问题并解决&#xff1f;电脑主板电池耗电太快什么原因CMOS电池耗电太快&#xff0c;有可能是主…

【转】ABP源码分析四十一:ZERO的Audit,Setting,Background Job

AuditLog: 继承自Entity<long>的实体类。封装AuditLog的信息。 AuditingStore: 实现了IAuditingStore接口&#xff0c;实现了将AuditLog的信息保存到数据库的功能。其通过IRepository<AuditLog, long>实例完成对数据库的操作。 BackgroundJobStore : 实现了IBack…

WinCE BSP中的DAT文件介绍

作者&#xff1a;ARM-WinCE DAT文件用于在WinCE启动的时候&#xff0c;定义文件系统的结构&#xff0c;也就是定义有哪些文件夹&#xff0c;哪些文件在什么位置等。每次冷启动的时候&#xff0c;Filesys模块会根据.dat文件中的内容来创建目录以及目录下的文件。 在BSP中我们可以…

翻译记忆软件:Trados 7/2006,兼容性和基本用法讨论

兼容性 我下载了Trados7&#xff0c;但是发现和Word2003和Word2007均没有加载出来&#xff0c;不能工作。 后来下载Trados2006&#xff08;7.5&#xff09;&#xff0c;安装之后&#xff0c;发现可以在Word2003下使用了&#xff0c;在Word2007下虽然加载项能够出来&#xff0c…

python canvas画移动物体_Python GUI编程入门(25)-移动Canvas对象

Canvas对象生成之后&#xff0c;有时会希望调整对象的位置。例如前面文章中提到的时钟小程序&#xff0c;我们稍加改造可以另外实现一个指针式时钟&#xff1a;在这个小程序中增加的功能就是根据具体时间计算每个指针的坐标信息&#xff0c;这部分功能在时钟类Clock中实现。这个…

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

ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展。同时重写了ABP核心模块中的permission功能&#xff0c;以实现授权。注意&#xff1a;ABP仅仅使用了Asp.Net Identity的身份认证功能&#xff0c;但没有使用Asp.Net Identi…

ASP.NET 安全认证(二)——灵活运用deny与allow 及保护.htm等文件

第二部分 Form 认证的实战运用 话说上回&#xff0c;简单地说了一下 Form 表单认证的用法。或许大家觉得太简单&#xff0c;对那些大内高手来说应该是“洒洒水啦”“小 Kiss 啦&#xff08;小意思&#xff09;”。今天咱们来点的花样吧&#xff1a;古有六扇门&#xff0c;拒收…

python nodemcu_python开发nodemcu(一)

nodemcu模块准备工作软件配置&#xff1a;1&#xff1a;查看python版本号&#xff0c;切换到Script目录下2&#xff1a;安装esptool使用命令pip install esptool安装成功标志曾经出现的错误错误提示不知道为什么&#xff1f;我2017/1/8号的时候安装一直提示这个错误&#xff0c…

搜索计算机硬盘的索引恢复,可以做到秒搜的神器everything,你可知对硬盘到底有多大伤害...

相比较Windows系统自带的搜索功能&#xff0c;everything堪称搜索界的神器&#xff0c;尤其在电脑里文件多达数万数十万的恐怖数量&#xff0c;但everything仍可做到秒搜&#xff0c;所以这款软件为大部分办公人员所喜爱。说到everything对硬盘的伤害程度&#xff0c;我们先看看…

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

ABP Zero模块中需要配置的地方主要集中在三块&#xff1a;1.配置静态的role&#xff1b;2.配置外部认证源&#xff1b;3.配置本地化语言和资源。 UserManagementConfig/IUserManagementConfig:定义了一个配置项&#xff0c;用于配置外部认证源。默认情况下&#xff0c;ABP Zero…

在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)

项目涉及到多个数据库的查询更新操作&#xff0c;也就必然需要分布式事务的支持&#xff0c;查了MSDN知道 .net 2.0 中利用新增的 System.Transactions 命名空间可以简单的实现分布式事务&#xff1a; System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Mi…

广州计算机自考独立办学,广东省06年自学考试独立办班广州考点办学计划的通知...

独立办班是广东省承担主考任务的普通高等院校中独立举办的自学考试辅导班(简称独立办班)&#xff0c;在省考委的领导下&#xff0c;接受省考办的指导与管理。根据广东省考试中心《关于印发2006年广东省自学考试独立办班办学计划的通知》(粤考试中心[2006]164号)文件精神&#x…

android 按下缩小效果松开恢复_Android自定义ScrollView实现放大回弹效果

背景在很多项目中我们都会用到ScrollView这个控件&#xff0c;因为ScrollView能够在屏幕内容多时下上滑动以适配加载的内容。但是ScrollView滑动时效果感觉太死板了&#xff0c;这个时候我们如果给它添加一个回弹的动画效果&#xff0c;会让界面交互更加舒服&#xff0c;提升用…

【转】OData的初步认识

What – OData是什么&#xff1f; OData - Open Data Protocol&#xff0c;是一个设计和使用RESTful API的标准。REST本身只是一个构建web服务的思想和理念&#xff0c;其没有规定一个统一的标准来限制开发人员该如何设计RESTful API。其实我们实际开发中的确也没有遵循某个统…

选择Windows CE wince嵌入式操作系统 的十大理由

Windows CE是什么&#xff1f; Windows CE是一个具有战略意义的操作系统。它拥有windows操作系统的特点&#xff0c;支持32位虚拟内存机制、按需分配内存和内存映射文件&#xff1b;他也是抢先式多任务并具有强大通信能力的Win32嵌入式操作系统&#xff0c;是微软专门为信息设…

三元运算符 在数据绑定中的使用

在使用 datalist 等控件绑定前台数据的时候&#xff0c;有时希望一行只显示定长字符&#xff0c;多出来的部分以省略号代替&#xff0c;我使用三元运算符来做&#xff1a;<asp:DataList id"DataList1"runat"server"RepeatColumns"5"Width&quo…

软件测试中软,软件测试报告 - 中软模板.docx

Webplug platform测试报告TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc259473567" 1. 引言 PAGEREF _Toc259473567 \h 1 HYPERLINK \l "_Toc259473568" 1.1 目的 PAGEREF _Toc259473568 \h 1 HYPERLINK \l "_Toc259473569" 1.2 术语 PAG…