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

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

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

相关文章

一剪梅

红藕香残玉簟秋。轻解罗裳&#xff0c;独上兰舟。 云中谁寄锦书来&#xff1f;雁字回时&#xff0c;月满西楼。 花自飘零水自流。一种相思&#xff0c;两处闲愁。 此情无计可消除&#xff0c;才下眉头&#xff0c;却上心头。转载于:https://www.cnblogs.com/daitengfei/archive…

android手机 scala环境,在Android中使用Scala中的Java常量

我在Android上的Scala中开发了一个奇怪的问题。我正在使用sbt android插件&#xff0c;现在我正在尝试让内容提供商工作&#xff0c;但是...在Android中使用Scala中的Java常量刚刚用Scala替换了Java的数组代码。它看起来像这样&#xff1a;val projection Array(People.NAME,P…

【转】ABP源码分析二十五:EventBus

IEventData/EventData: 封装了EventData信息&#xff0c;触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册&#xff0c;注销和触发事件处理函数的方法。EventBus定义了一个Dictionary容器来存放事件和处理该事件的对象(其实不是对象而是Factory&#xf…

深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...

在之前的例子里&#xff0c;由于Atlas客户端在调用Web Services方法时总是使用了Sys.Net.ServiceMethod类&#xff0c;因此始终使用了HTTP POST方法与服务器端进行交互。POST方法有其好处&#xff0c;不过GET方法也自有其价值。我们在使用Atlas进行Web Services调用时&#xff…

【转】ABP源码分析二十六:核心框架中的一些其他功能

本文是ABP核心项目源码分析的最后一篇&#xff0c;介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系。当然可以自定义的去实现IAbpSession使之与CLR的Session关联 IAbpSession&#xff1a;定义如下图中的四个属性。 NullAbpSessio…

CASE 语句

--简单case函数 USE pubsGOSELECT Category CASE type WHEN popular_comp THEN 计算机类 WHEN mod_cook THEN 现代厨艺 WHEN business THEN 商业图书 WHEN psychology THEN 心理学 WHEN trad_cook THEN 传统厨艺 ELS…

【转】ABP源码分析二十七:ABP.Entity Framework

IRepository&#xff1a;接口定义了Repository常见的方法 AbpRepositoryBase&#xff1a;实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepositoryBase中定义的抽象方法&#xff1a;GetAll&#xff0c;Insert&#xff0c;Delete&#xff0c;Update。在实际项目…

泛型实现List(ListT)排序

代码 publicclassPost : IComparable<Post>{ privatestringid string.Empty; privatestringtitle string.Empty; privateintorderby; publicstringID { get{ returnid; } set{ id value; } } pu…

华为鸿蒙与佳华,华为鸿蒙系统发布,带来三大好消息

华为在6月2日举办鸿蒙产品发布会&#xff0c;正式推出搭载鸿蒙操作系统的智能手机。这意味着此前只用于智慧屏、可穿戴设备等产品的鸿蒙操作系统终于覆盖到华为最主要的终端。从目前市场上的操作系统市场比例上看&#xff0c;安卓占据了全球68.63%&#xff0c;苹果占据了30.99%…

【转】ABP源码分析二十八:ABP.MemoryDB

这个模块简单&#xff0c;且无实际作用&#xff08;该模块用于支持ABP框架单元测试的&#xff09;。一般实际项目中都有用数据库做持久化&#xff0c;用了数据库就无法用这个MemoryDB 模块了。原因在于ABP限制了UnitOfWork的类型只能有一个(前文以作介绍)&#xff0c;一般用了数…

规定输出字段html,控制视图输出的包装字段内容的 HTML 标签《 Drupal 7 基础 (上) 》...

视图允许我们为分别定义用来包装字段内容&#xff0c;字段标签&#xff0c;还有字段内容和字段标签的 HTML 标签。这里我们先来看一下电影的标题字段&#xff0c;可以使用 Chrome 浏览器的开发者工具查看一下&#xff0c;鼠标放在其中的一个电影标题内容上&#xff0c;点击右键…

【转】ABP源码分析二十九:ABP.MongoDb

这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类&#xff0c;封装了对MongoDb数据库的操作。 这个module通过引用MongoDB.Driver&#xff0c;MongoDB.Bson&#xff0c;MongoDB.Driver.Core,MongoDB.Driver.Legacy类库来操作MongoDb. 当项目不需要依赖于关系型…

将自己的女朋友的话和视频做为启动音乐和启动动画(XP)

找到C:\windows\system32\oobe\images&#xff0c;可以看到3个wma文件&#xff0c;其中title.wma文件时xp的启动音乐&#xff0c;intro.wmv文件时xp的启动动画。哈哈&#xff0c;以后有女朋友了&#xff0c;只要替换一下文件&#xff0c;就可以把她的声音和视频设置在xp系统里。…

html防替换资源,Webpack中有没有替换html静态资源的插件

比如html文件中有如下代码<div><!-- /dev 是开发目录 --><img src"/dev/img.png"></div>然后经过处理后变成如下<div><!-- /static 是上线目录, a7l3k2n是图片的hash --><!-- 同时把img.png从/dev目录移动到/static目录 --&g…

【转】ABP源码分析三十:ABP.RedisCache

ABP 通过StackExchange.Redis类库来操作Redis数据库。 AbpRedisCacheModule&#xff1a;完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRedisCacheConfig&#xff1a;定义了connectionStringKey和databaseIdAppSetting的值。这两个值对象redis 在web.config中的key值…

平板可以看html文档吗,iPad如何看电脑里的视频 如何使用Ipad看电脑里的电影

电脑上的视频怎么在iPad上观看&#xff1f;如何在ipad播放电脑中的视频首先&#xff0c;看你的视频格式。如果是mp4&#xff0c;就可以直接放入ipad自带浏览器或者通过itunes直接传。其他格式的需要下载第三方播放器&#xff0c;目前使用较多的支持高清播放的有Oplayer&#xf…

【转】ABP源码分析三十一:ABP.AutoMapper

这个模块封装了Automapper,使其更易于使用。 下图描述了改模块涉及的所有类之间的关系。 AutoMapAttribute&#xff0c;AutoMapFromAttribute和AutoMapToAttribute&#xff1a;这三个attribute用于标注一个类到另外一个类的map方向。 AutoMapperHelper: 通过调用Automapper的A…

SQL语言的事务机制_转摘

什么是数据库事务  数据库事务是指作为单个逻辑工作单元执行的一系列操作。设想网上购物的一次交易&#xff0c;其付款过程至少包括以下几步数据库操作&#xff1a;   更新客户所购商品的库存信息    保存客户付款信息--可能包括与银行系统的交互    生成订单并且保…

html背景定位,css background-position center left right top bottom代表意思

background-position:center right这里center right分别代表什么,引入对图片背景定位介绍background-position是用于定位背景图片中对象中显示定位&#xff0c;比如图片作为背景时在对象内什么位置开始显示&#xff0c;显示样式等。比如让一个图片作为对象背景距离对象左边或右…

【转】ABP源码分析三十二:ABP.SignalR

Realtime Realtime是ABP底层模块提供的功能&#xff0c;用于管理在线用户。它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在线用户的信息 OnlineClientManager/IOnlineClientManager: 用于提供基本维护在线用户的方法。其内部维护了…