在上一节五分钟完成 ABP vNext 通讯录 App 开发 中,我们用完成了通讯录 App 的基础开发。

这本章节,我们会给通讯录 App 安装私信模块,使不同用户能够通过相互发送消息,并接收新私信的通知。在章节的最后,笔者将演示模块的“改装”,实现禁止用户发私信给自己的定制化需求。

什么是“模块”?

使用 Abp 框架,你可以提前制作一些功能模块,例如微信登录、私信、博客、论坛等模块,将它们打包备用。在开发具体的 App 应用时,你可以轻松将模块安装到你的工程中,节省了大量的重复性工作。除了自己造轮子,你还可以在 NuGet 上安装由开源社区维护的模块,当然,社区也在等待你的贡献。

安装私信模块

笔者用到的私信应用模块(EasyAbp.PrivateMessaging)由 EasyAbp 组织开发并持续维护,你甚至可以在商业项目中免费使用它。现在,笔者将带你一步步给通讯录 App 安装此模块。

第一步:使用 NuGet 安装模块包

  1. 将 NuGet 包 EasyAbp.PrivateMessaging.Application,安装到 AddressBook.Application 项目。

  2. 将 NuGet 包 EasyAbp.PrivateMessaging.Application.Contracts,安装到 AddressBook.Application.Contracts 项目。

  3. 将 NuGet 包 EasyAbp.PrivateMessaging.Domain,安装到 AddressBook.Domain项目。

  4. 将 NuGet 包 EasyAbp.PrivateMessaging.Domain.Shared,安装到 AddressBook.Domain.Shared 项目。

  5. 将 NuGet 包 EasyAbp.PrivateMessaging.EntityFrameworkCore,安装到 AddressBook.EntityFrameworkCore 项目。

  6. 将 NuGet 包 EasyAbp.PrivateMessaging.HttpApi,安装到 AddressBook.HttpApi 项目。

  7. 将 NuGet 包 EasyAbp.PrivateMessaging.HttpApi.Client,安装到 AddressBook.HttpApi.Client 项目。

  8. 将 NuGet 包 EasyAbp.PrivateMessaging.MongoDB,安装到 AddressBook.MongoDB 项目。

  9. 将 NuGet 包 EasyAbp.PrivateMessaging.Web,安装到 AddressBook.Web 项目。(如果你不需要 UI,可以跳过这一步)

第二步:添加配置

  1. 分别在以上项目的 Module 类中添加私信模块的依赖,例如:在 AddressBookApplicationModule.cs 中添加特性 [DependsOn(PrivateMessagingApplicationModule)],以此类推。

  2. 在 AddressBookApplicationModule.cs 中找到 Configure<AbpAspNetCoreMvcOptions>(options => { ... });,在里面加一行配置 options.ConventionalControllers.Create(typeof(PrivateMessagingApplicationModule).Assembly);,这一步是为了私信模块 WebAPI 的自动生成。

  3. 在 AddressBookMigrationsDbContext.cs 中找到 OnModelCreating 方法,在里面加一行 builder.ConfigurePrivateMessaging();,使私信模块的 EF Core 迁移能够进行。

第三步:创建 EF Core 迁移并更新数据库

不熟悉这块操作的同学可以参考 Abp 官方手册的介绍。

第四步:安装完毕

启动 AddressBook.Web 项目,可以看到私信模块已经安装成功了。

进一步了解 EasyAbp 私信模块:https://github.com/EasyAbp/PrivateMessaging

改进模块:禁止用户发私信给自己

Abp vNext 框架支持应用对模块代码的重写,在 AddressBook.Application 项目中新建 MyPrivateMessageAppService.cs

    [Dependency(ReplaceServices = true)]public class MyPrivateMessageAppService : PrivateMessageAppService{public MyPrivateMessageAppService(IDataFilter dataFilter,IExternalUserLookupServiceProvider externalUserLookupServiceProvider,IPrivateMessageRepository privateMessageRepository,IPrivateMessageNotificationManager notificationManager,IPrivateMessageSenderSideManager privateMessageSenderSideManager,IPrivateMessageReceiverSideManager privateMessageReceiverSideManager) : base(dataFilter,externalUserLookupServiceProvider, privateMessageRepository, notificationManager,privateMessageSenderSideManager, privateMessageReceiverSideManager){}public override Task<PrivateMessageDto> CreateAsync(CreateUpdatePrivateMessageDto input){if (input.ToUserName == CurrentUser.UserName){throw new UserFriendlyException("请勿给自己发消息");}return base.CreateAsync(input);}}

效果展示

基于 Abp 的高可扩展性,甚至 JS 和 CSS 等静态文件也能够被重写,请阅读官方文档以了解更多用法:Customizing the Existing Modules

后记

等到不久的将来 Abp 官方模块商城 market.abp.io 上线,文中手动安装模块的方式将成为历史,你只需要按一个键,模块就自动安装好了。在此之前,AbpHelper 可能会先开发一个简易的模块安装器,如果你有需要,请关注我们的进展:https://github.com/EasyAbp/EasyAbpGuide

下一节

在下一节中,笔者将会介绍,如何通过一个改动,让我们的通讯录 App 升级为多租户 SaaS 系统。

给 ABP vNext 应用安装私信模块相关推荐

  1. [Abp vNext 源码分析] - 2. 模块系统的变化

    一.简要说明 本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 I ...

  2. 五分钟完成 ABP vNext 通讯录 App 开发

    ABP vNext(后文简称Abp)是 Volo 公司堪称艺术品级的应用开发框架,它基于领域驱动设计(DDD)的思维,创新地采用了模块化的设计.Abp 目前无疑是 ASP.NET Core 开发框架中 ...

  3. 聊一聊ABP vNext的模块化系统

    官网: https://abp.io/ 开源: https://github.com/abpframework/abp EasyAbp: https://easyabp.io/ Abp 模块: htt ...

  4. abp vnext2.0之核心组件模块加载系统源码解析

    abp vnext是abp官方在abp的基础之上构建的微服务架构,说实话,看完核心组件源码的时候,很兴奋,整个框架将组件化的细想运用的很好,真的超级解耦.老版整个框架依赖Castle的问题,vnext ...

  5. 四、Abp Vnext中使用Minio打造文件管理模块(上)

    在Abp商业版本中已经提供了文件管理模块的,免费版本是没有的,本文将介绍如何使用Minio打造一个自己的文件管理模块. 在项目开始之前,需要先安装一个Minio服务,可以在本地pc或云主机中安装,具体 ...

  6. 六、Abp Vnext 中Efcore的多模块关联查询

    abp框架提供了非常棒的模块开发体验,这些模块是可复用的,并且也适用于开发微服务:既然模块可以独立发布,那么它的数据库配置也是独立的,对于使用efcore的模块,每个模块中都包含一个不同的Dbcont ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先 转载于:https://github.com/Meowv/Blog 本篇主要使用Entity Framework ...

  8. ABP vNext微服务架构详细教程——身份管理服务

    1 框架搭建 ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户.角色.权限管理,ABP基础配置IdentityServer的基础配置数据等功能.module模 ...

  9. Abp Vnext Vue3 的版本实现

    Abp Vnext Pro 的 Vue3 实现版本 开箱即用的中后台前端/设计解决方案 开始 Github地址 文档地址 演示地址 系统功能 [x] 用户管理 [x] 角色管理 [x] 审计日志 [x ...

最新文章

  1. 每一个项目都可以有一个项目blog page
  2. C++ Double-Ended Queues(双向队列)
  3. 【渝粤教育】广东开放大学 动画原画设计 形成性考核 (22)
  4. 清空本地_PyQt5播放实时视频流或本地视频文件
  5. matlab2c使用c++实现matlab函数系列教程-prod函数
  6. python | 降水数据分析(Ⅰ) 绘制全国降水四季分布图
  7. 从程序员到项目经理(九):程序员加油站 — 再牛也要合群
  8. Win10系统在哪里卸载软件
  9. 技术接受模型(TAM,Technology Acceptance Model)
  10. ios 持续获取定位 高德地图_iOS 定位 高德地图
  11. python金融量化分析 | 闲杂笔记
  12. php5编译安装常见错误和解决办法集锦
  13. 《大话设计模式》—— 读后感 (12)牛市股票还会亏钱?—— 外观模式
  14. 「大哉数学之为用」优选法——梯级水库灌溉的优化设计
  15. Java Type接口 运行时获取泛型类型
  16. 最通俗易懂的OSPF五种报文+七种状态
  17. 欧洲为何没有牛逼的互联网公司?
  18. 在 ASP.NET Core 中上传文件
  19. 操作系统内核参数semmni在节点上没有适当的值应为=128找到=0
  20. 学习 axios 源码整体架构,打造属于自己的请求库

热门文章

  1. 应用系统日志采集解决方案
  2. LeetCode Implement Queue using Stacks (数据结构)
  3. iOS SQLite函数总结
  4. 一款好的折线图、饼图、柱形图
  5. Android学习笔记(1)
  6. python3安装mysqlclient_Python3 安装mysqlclient错误处理(MAC版)
  7. 使用增量备份修复DG中的GAP
  8. 海尔联手软银机器人,进军服务机器人领域
  9. Python之路【第一篇】:环境搭建
  10. 免杀新姿势:利用线程将恶意代码注入到内存中