ABP Framework 5.0 RC.1 新特性和变更说明
.Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定。
5.0版本新特性
新特性列表:
- 静态 C# 和 JavaScript 客户端代理
- 分布式事件总线支持事务收件箱&发件箱模式
- 在事务中发布事件
- 禁用用户
- 租户邮箱设置
- 仪表板授权控制
- AbpControllerBase 基类
- 自动设置新实体 TenantId 属性值
静态(生成) C# 和 JavaScript 客户端代理
动态 C# 和 JavaScript 客户端代理是ABP框架最受欢迎的特性之一。动态代理在运行时生成代理代码,并使客户端到服务端的调用变得简单。在 ABP Framework 5.0 中,提供了另一种方法:可以在开发时生成客户端代理代码。
静态代理的优点:
- 性能提升,因为不需要在运行时获取 HTTP API 定义信息。
- 项目解耦,以微服务架构为例,API 网关应用直接使用静态代理,所以不需要在项目中添加对应的微服务 HTTP API 层的引用。动态代理方式,需要先从 API 网关返回一个 HTTP API 定义组合,所以需要在网关添加微服务 HTTP API层的引用。
静态代理的缺点:当 API 终结点定义发生改变时,需要重新生成客户端代理代码。
至于使用哪种代理方式,需要结合项目实际情况进行选择。是的,软件开发中没有“完美技术”,总是需要权衡利弊,适合才是最好的。
分布式事件总线支持事务收件箱&发件箱模式
这应该是分布式系统开发人员最期待的特性之一。(至此,使用 ABP Framework 开发分布式系统的基础设施已经完备!)
事务发件箱模式用于在操作应用程序数据库的同一个事务中发布分布式事件。
当数据发生变化时,分布式事件被保存在同一个事务中的数据库中,然后由一个独立的后台工作进程发送给消息代理,如RabbitMQ或Kafka,支持失败重试机制。通过这种方式,确保数据库状态和已发布事件之间的一致性。
事务收件箱模式,确保数据库状态和已接收事务之间的一致性。首先将接收的事件保存到数据库,然后在事务中执行事件处理程序同时从收件箱队列中移除事件。通过将处理过的消息保留一段时间,并丢弃从消息代理接收到的重复事件,确保事件只执行一次。
在应用程序中,启用收件箱和发件箱模式需要一些手动步骤。可以参看控制台应用程序示例。
在事务中发布事件
前面介绍的特性(发件箱和收件箱模式)解决分布式系统事务发布事件问题。事务中发布事件这一功能,解决在非分布式应用程序发布事件的同一事务中执行事件处理程序的问题。在 5.0 中,所有事件(本地或分布式)在相同事务中处理。任何处理程序执行失败,该事务都会回滚。如果不希望触发回滚,可以使用 try/catch 捕获并忽略事件处理程序中的异常。
有一点需要清楚的是如果系统中并没有集成分布式事件提供程序,如 RabbitMQ 、Kafka,那么分布式事件总线将在进程内执行,此时就像本地事件一样。因此,无论系统是分布式或非分布式,所有事件都变成事务性的。
以上处理都是默认进行的。有一个与此更改相关的弃用说明(一些预定义的事件将在下一个主版本中删除,已经不再需要了)。
禁用用户
Identity 应用模块新增禁用/启用用户功能,对应添加和编辑用户对话框中 Active 复选框,禁用操作实现禁止用户登陆系统而不删除用户数据。

这项功能在AbpUsers表中添加新字段,所以需要添加新的数据迁移。
租户邮箱设置
如果是创建多租户应用,现在支持为每个租户单独进行邮件发送设置。为了使设置可用,首先需要为租户设置对应功能权限:

勾选租户邮件设置权限:

在开发环境,登出,切换到租户并使用租户管理员登陆,点击 Administration -> Settings 菜单,可以看到邮件设置:

仪表板授权控制
ABP可以集成 Hangfire 作为后台作业工作者,Hangfire 仪表板用于监控和控制后台作业队列,参看仪表板截图:

Hangfire仪表板默认无需授权即可访问,任何用户可通过 /hangfire URL查看和控制作业。在 ABP 5.0 版本中,为Hangfire 仪表板添加内置授权过滤器AbpHangfireAuthorizationFilter。使用如下示例代码代替 app.UseHangfireDashboard(); 实现:
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() }
});
添加过滤器之后,只有授权用户能够查看仪表板,当然,建议设置一个权限名称,只有拥有该权限的用户可以查看仪表板:
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
AsyncAuthorization = new[] {
new AbpHangfireAuthorizationFilter("MyPermissionName")
}
});
上面示例将Hangfire 仪表板权限定义名为 MyPermissionName ,使用框架权限系统。
AbpControllerBase 基类
ABP 提供 AbpController 类作为 MVC 控制器的继承基类,在控制器中通过依赖注入提供常用的服务,以此简化控制器的编写。在 5.0 版本中,提供第二个控制器基类 AbpControllerBase ,不包含视图功能,用于创建 API 控制器。在开发 API 控制器,建议使用 AbpControllerBase 代替 AbpController 类。
示例:创建 API 控制器
[Route("api/products")]
public class ProductController : AbpControllerBase
{
// TODO: ...
}
自动设置新实体 TenantId 属性值
在 5.0 版本中,当你创建一个新实体对象(实现 IMultiTenant 接口)时,ABP 在 Entity 基类构造函数中自动设置 TenantId ,所有实体和聚合根基类都继承 Entity 类。TenantId 设置为当前租户 ICurrentTenant.Id 属性值。
之前,由开发者为新实体设置 TenantId 值,现在交给 ABP 自动处理,仅在需要设置为其他租户Id时手动设置。
在极少数情况下,需要注意这个变更,比如:从一个租户上下文创建 host 端实体,不需要明确地设置 host 实体 TenantId 属性为 null 。
主要变更说明
- 升级到
.Net 6.0 - 升级到
Bootstrap 5 IRepository不再继承IQueryable接口- MVC / Razor Pages UI 移除对 gulp 打包依赖,使用
abp-install-libs代替。 - 弃用
EntityCreatingEventData,EntityUpdatingEventData,EntityDeletingEventData和EntityChangingEventData。
欢迎加入 ABP Framework 研习社(QQ群:726299208)
专注 ABP Framework 学习,经验分享、问题讨论、示例源码、电子书共享!关注 ABP Framework 最新开发进度,后面还会陆续发布新功能详解、新功能示例等系列文章,敬请关注!
转载出处:https://www.cnblogs.com/YGYH/p/15571635.html (编程悟道)
翻译原文:ABP.IO Platform 5.0 RC.1 Has Been Released
dotNET兄弟会-公众号
专注.Net开源技术及跨平台开发!致力于构建完善的.Net开放技术文库!为.Net爱好者提供学习交流家园!

ABP Framework 5.0 RC.1 新特性和变更说明的更多相关文章
- ABP Framework 5.2 RC 发布及新增功能介绍
ABP Framework 5.2 RC 新增功能 目录 ABP Framework 5.2 RC 新增功能 单层解决方案模板 EF Core 数据库迁移 UI 和 数据库 选项 API 版本控制 源 ...
- Spring Boot 2.0正式发布,新特性解读
作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...
- C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...
- NET Framework 4.5 五个新特性
.NET Framework 4.5 五个新特性 Framework 4.5 已经开发了几个项目了,想去研究一下VS 2015 里面的跨平台..不过好像4.5内核新特性还没搞明白呢还是先看看4.5内核 ...
- Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...
- c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】
引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...
- 转载——C# 6.0可能的新特性及C#发展历程
据扯,C# 6.0在不远的将来就发布了,对应的IDE可能是VS 2014(.Net Framework 5.0),因为VS 2013已于2013年10月份发布了,对应的是.Net Franework ...
- 有史来最大改变 Android 5.0十大新特性
有史来最大改变 Android 5.0十大新特性 2014.10.16 14:51:31 来源:腾讯数码作者:腾讯数码 ( 0 条评论 ) 距离Android系统上一次重大更新不到一年的时间,谷歌 ...
- C# 6.0可能的新特性
C# 6.0可能的新特性 1.主构造函数(Primary Constructors) 主构造函数给类中的变量赋值 Before public class Point { private int x, ...
随机推荐
- windows中抓包命令,以及保存为多个文件的方法
本文主要介绍windows中抓包命令,以及保存为多个文件的方法 说一说保存为多个文件存储数据包这个问题的由来,一般如果长时间抓包,有可能需要等上几个小时,因为这个时候抓包的内容都是存放在内存中的,几个 ...
- dev分支和release是什么
master(主分支) 存在一条主分支(master).所有用户可见的正式版本,都从master发布(也是用于部署生产环境的分支,确保master分支稳定性).主分支作为稳定的唯一代码库,不做任何开发 ...
- 学校选址(ArcPy实现)
一.背景 合理的学校空间位置布局,有利于学生的上课与生活.学校的选址问题需要考虑地理位置.学生娱乐场所配套.与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区. 二.目 ...
- 最新.NET MAUI有什么惊喜?
.NET 6 Preview 7 现已发布啦,我们为 .NET 多平台应用程序 UI (MAUI) 引入了所有的新布局.这是性能和可靠性的重大变化.我们很高兴我们还增加了一些关于accessibili ...
- 2021.7.27--Benelux Algorithm Programming Contest 2020 补提
I Jigsaw 题目内容: 链接:https://ac.nowcoder.com/acm/contest/18454/I 来源:牛客网 You have found an old jigsaw pu ...
- SingnalR 从开发到生产部署闭坑指南
前天倒腾了一份[SignalR在react/go技术栈的实践], 步骤和思路大部分是外围框架的应用, 今天趁热打铁, 给一个我总结的SignalR避坑指南. 1.SignalR 默认协商 不管是.NE ...
- SharkCTF2021 fastcalc题记
web --> python脚本编写练习. 直接访问发现全是乱码: 看包发现Content-Type里面没有charset=utf-8. 于是用python访问一下,用.encoding='ut ...
- UltraSoft - Beta - Scrum Meeting 11
Date: May 27th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录会议 Liuzh 前端 增加了对重复日程的支持 Kkkk 前端 测试验证前后端 ...
- oo第一次博客-三次表达式求导的总结与反思
一.问题回顾与基本设计思路 三次作业依次是多项式表达式求导,多项式.三角函数混合求导,基于三角函数和多项式的嵌套表达式求导. 第一次作业想法很简单,根据指导书,我们可以发现表达式是由各个项与项之间的运 ...
- virtual box搭建虚拟机nat和host only网络配置实用
virtual box搭建虚拟机nat和host only网络配置实用 一.背景 二.需求 二.设置虚拟机的网络 1.创建一个全局的nat网络 2.添加主机网络管理器 3.设置虚拟机网络 1.网卡1设 ...