【转】ABP源码分析二十四:Notification
NotificationDefinition: 用于封装Notification Definnition 的信息。注意和Notification 的区别,如果把Notification看成是具体的消息内容,NotificationDefinition则是对这个消息自身的定义(可理解为消息的类型)。
INotificationDefinitionManager:该接口定义根据name返回NotificationDefinition的一些方法
NotificationDefinitionManager: 单例对象,实现了INotificationDefinitionManager接口。NotificationDefinitionManager封装了一个Dictionary<string, NotificationDefinition>字典对象用于存放NotificationDefinition。其Initialize方法完成所有NotificationDefinition的初始化和装载。Initialize方法从NotificationConfiguration读取NotificationProvider以装载NotificationDefinition到他的私有的IDictionary容器中。其实现的手法和Feature,Navigation以及Authorization是一致的
INotificationDefinitionContext/NotificationDefinitionContext: 上下文类,作为方法的参数。没有特别的业务逻辑。这边context只是封装了INotificationDefinitionManager对象。
NotificationProvider: 抽象基类,用于向INotificationDefinitionManager对象(NotificationDefinitionManager)中添加NotificationDefinition. Abp框架只提供了抽象类,实际项目中可以创建自定义NotificationProvider来从数据库中读取NotificationDefinition来填充到NotificationDefinitionManager对象中。
INotificationConfiguration/NotificationConfiguration:提供给外部配置NotificationProvider。NotificationDefinitionManager通过具体的NotificationProvider来初始化和装载Notification字典对象。但是ABP核心模块处于最底层,怎么能知道上层定义的NotificationProvider的类型呢? NotificationConfiguration为解决这个问题引入了NotificationProvider配置项。NotificationProvider就是一个Type 列表 (ITypeList<NotificationProvider>),注意是NotificationProvider的Type,不是实例。在需要NotificationProvider的地方,可以使用容器根据Type构造出实例。
Notification:用于封装Notification 的信息。用作DTO而不是Entity
NotificationData: 用于储存真正的Notification的数据(即内容)
NotificationInfo:用于封装Notification的Entity.
INotificationStore:该接口提供持久化NotificationInfo的方法。NullNotificationStore是其空的实现。具体的实现留到外部的模块中。
INotificationPublisher/NotificationPublisher: 用于发布Notification,首先调用INotificationStore实例进行实例化,接着分发Notification。如果有接收者并且接收者少于5个则直接调用INotificationDistributer进行分发,否则就把分发的任务加到后台工作队列中去。
UserNotificationInfo:用于封装User和Notification关系的Entity.
UserNotification:用于封装User和Notification关系的信息。用作DTO而不是Entity
UserNotificationState: 表示UserNotification的状态:读和未读
IUserNotificationManager/UserNotificationManager: 用于获取,删除UserNotification,以及更改UserNotification的状态。
NotificationSubscriptionInfo:用于封装notification 和subscriptor 的关系的Entity
NotificationSubscription:用于封装封装notification 和subscriptor(User) 的关系的DTO,不是Entity。
INotificationSubscriptionManager/NotificationSubscriptionManager: 用于获取,删除和添加NotificationSubscription。
NotificationSettingProvider:用于初始化Notification功能模块的Setting,Notification功能模块的唯一一项setting就是设置是否接收Notification。
INotificationDistributer/NotificationDistributer:用于分发Notification给User,也就是建立Notification和User的关系。在分发Notification给某个User前会检查User的NotificationSetting,如果该设置为True就建立Notification和该User的关系
NotificationDistributionJob: 封装了INotificationDistributer的后台任务,当Notification的接收者超过5人时会,ABP将分发任务封装为一个后台执行任务,以减少用户等待时间。5是被hardcode到源码中的。
返回ABP源码分析系列文章目录
【转】ABP源码分析二十四:Notification相关推荐
- 【转】ABP源码分析二十九:ABP.MongoDb
这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...
- 【转】ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- 【转】ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- 【转】ABP源码分析二十八:ABP.MemoryDB
这个模块简单,且无实际作用(该模块用于支持ABP框架单元测试的).一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能 ...
- 【转】ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- 【转】ABP源码分析二十二:Navigation
MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...
- 【转】ABP源码分析二十:ApplicationService
IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...
- ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
最新文章
- 轻松两步,我在 SpringBoot 服务上实现了接口限流
- html编写的过程中,为什么font设置属性的时候,第二个属性不起作用
- IRP_MJ_CREATE
- 区块链BaaS云服务(28)TOP Network 之数据结构
- 关键路径问题--完美版
- Linux文本查看命令之uniq
- sql LEFT JOIN RIGHT JOIN(左连接)(mysql)
- 【数据结构与算法】实验 模拟FIFO网络打印机
- 千月影视双端源码开源版_最新支持双端神器更新,属实有点牛逼!
- DbNetSpell
- 反卷积可视化工具--deconv-deep-vis-toolbox
- [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
- 特殊矩阵——三对角矩阵(Tridiagonal Matrix)
- 符号熵(附matlab代码)
- 虚拟化技术 — GuestOS Agent
- sscanf提取字符串数字
- Python 预测 NBA 比赛结果
- 计算机控制台程序,什么是电脑控制台,是DOS设定吗?
- P7560-[JOISC 2021 Day1]フードコート【吉司机线段树】
- 我所了解的JavaScript糟粕和鸡肋
热门文章
- 【MySQL原理解析】01. 一条SQL查询语句是如何执行的
- spring体系思维导图
- axios的数据请求方式及跨域
- (转)分布式锁的几种使用方式(redis、zookeeper、数据库)
- java if,if...else...的应用
- 【FICO 汇率】汇率
- jenkins Auth fail验证失败
- Fragment销毁时replace和add两个方法的区别
- Gitlab的develop角色的人没有权限无法提交的问题解决方案
- why I need a flow learn note.