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源码分析二十四:Notification的更多相关文章
- ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
- ABP源码分析二十:ApplicationService
IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...
- ABP源码分析二十二:Navigation
MenuDefinition:封装了导航栏上的主菜单的属性. MenuItemDefinition:封装了主菜单的子菜单的属性.子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMen ...
- ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- ABP源码分析二十八:ABP.MemoryDB
这个模块简单,且无实际作用.一般实际项目中都有用数据库做持久化,用了数据库就无法用这个MemoryDB 模块了.原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍),一般用了数据库 ...
- ABP源码分析二十九:ABP.MongoDb
这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- Vue.js 源码分析(二十四) 高级应用 自定义指令详解
除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上 ...
- ABP源码分析三十二:ABP.SignalR
Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...
随机推荐
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- 微信应用号(小程序)开发IDE配置(第一篇)
2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...
- 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...
- 主成分分析(PCA)原理总结
主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...
- [C#] 简单的 Helper 封装 -- CookieHelper
using System; using System.Web; namespace ConsoleApplication5 { /// <summary> /// Cookie 助手 // ...
- obj.style.z-index的正确写法
obj.style.z-index的正确写法 今天发现obj.style.z-index在js里面报错,后来才知道在js里应该把含"-"的字符写成驼峰式,例如obj.style.z ...
- 用MongoDB分析合肥餐饮业
看了<从数据角度解析福州美食>后难免心痒,动了要分析合肥餐饮业的念头,因此特地写了Node.js爬虫爬取了合肥的大众点评数据.分析数据库我并没有采用MySQL而是用的MongoDB,是因为 ...
- input type='file'上传控件假样式
采用bootstrap框架样式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...
- C++的内存泄漏检测【转载】
原文地址: http://www.cnblogs.com/jily/p/6239514.html
- 自定义鼠标光标cursor
通过css属性 Cursor:url()自定义鼠标光标. {cursor:url('图标路径'),default;} url是自定义鼠标图标路径 default指的是定义默认的光标(通常是一个箭头), ...