ABP源码分析二十四:Notification

时间:2022-03-11 03:04:48

NotificationDefinition: 用于封装Notification Definnition 的信息。注意和Notification 的区别,如果把Notification看成是具体的消息内容,NotificationDefinition则是对这个消息自身的定义(可理解为消息的类型)。

ABP源码分析二十四:Notification

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构造出实例。

ABP源码分析二十四:Notification

Notification:用于封装Notification 的信息。用作DTO而不是Entity

NotificationData: 用于储存真正的Notification的数据(即内容)

ABP源码分析二十四:Notification

NotificationInfo:用于封装Notification的Entity.

ABP源码分析二十四:Notification

INotificationStore:该接口提供持久化NotificationInfo的方法。NullNotificationStore是其空的实现。具体的实现留到外部的模块中。

ABP源码分析二十四:Notification

INotificationPublisher/NotificationPublisher: 用于发布Notification,首先调用INotificationStore实例进行实例化,接着分发Notification。如果有接收者并且接收者少于5个则直接调用INotificationDistributer进行分发,否则就把分发的任务加到后台工作队列中去。

ABP源码分析二十四:Notification

UserNotificationInfo:用于封装User和Notification关系的Entity.

ABP源码分析二十四:Notification

UserNotification:用于封装User和Notification关系的信息。用作DTO而不是Entity

ABP源码分析二十四:Notification

UserNotificationState: 表示UserNotification的状态:读和未读

ABP源码分析二十四:Notification

IUserNotificationManager/UserNotificationManager: 用于获取,删除UserNotification,以及更改UserNotification的状态。

ABP源码分析二十四:Notification

NotificationSubscriptionInfo:用于封装notification 和subscriptor 的关系的Entity

ABP源码分析二十四:Notification

NotificationSubscription:用于封装封装notification 和subscriptor(User) 的关系的DTO,不是Entity。

ABP源码分析二十四:Notification

INotificationSubscriptionManager/NotificationSubscriptionManager: 用于获取,删除和添加NotificationSubscription。

ABP源码分析二十四:Notification

NotificationSettingProvider:用于初始化Notification功能模块的Setting,Notification功能模块的唯一一项setting就是设置是否接收Notification。

ABP源码分析二十四:Notification

ABP源码分析二十四:Notification

INotificationDistributer/NotificationDistributer:用于分发Notification给User,也就是建立Notification和User的关系。在分发Notification给某个User前会检查User的NotificationSetting,如果该设置为True就建立Notification和该User的关系

NotificationDistributionJob: 封装了INotificationDistributer的后台任务,当Notification的接收者超过5人时会,ABP将分发任务封装为一个后台执行任务,以减少用户等待时间。5是被hardcode到源码中的。

ABP源码分析二十四:Notification

ABP源码分析二十四:Notification

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