o ABP Framework 版本号:
7.4.0-rc.1
发布时间:2023.8.16
o 阅读原文:ABP.IO Platform 7.4 RC Has Been Published[1]
o 翻译:
iEricLee
o 引用地址: 原文首发-知识乐 ABP Framework专题[2]
该版本中发布的主要特性:
o 设置系统支持动态存储
o 新增
特性
AdditionalAssemblyAttributeo 分布式事件支持关联ID(
CorrelationId
)o EF Core 数据库迁移系统
o 其他新闻
新增的四项特性其中有三项用于增强微服务架构:
o 设置系统支持动态存储为微服务提供单点收集和获取设置的支持。
o 分布式事件关联ID支持跟踪跨多个服务的分布式事件。
o EF Core 数据库迁移系统对于迁移微服务的数据库特别有用。
设置系统支持动态存储
在此版本之前,微服务架构的项目中很难实现设置统一管理:在不同的微服务中定义设置,并在单个应用程序中集中管理所有设置。为了实现该功能,需要为管理微服务添加所有相关微服务的服务契约项目引用,这样才能获取所有的设置并管理它们。
在这个版本中,ABP Framework 引入了动态设置存储,这是一个重要的功能,允许从一个点收集和获取所有设置定义,简化了微服务上设置管理的问题。
注:如果要从早期版本升级并使用“设置管理”应用模块,则需要创建新数据迁移并将其应用到数据库,因为已为此功能添加了新的数据库表。
新增 AdditionalAssemblyAttribute 特性
在这个版本中,引入了 AdditionalAssemblyAttribute
特性来定义模块的附加程序集。ABP Framework 自动将模块的所有服务注册到依赖注入系统。通过扫描程序集中定义模块类的类型来查找服务类型。通常,每个程序集都包含一个单独的模块类定义,并且模块使用 DependsOn
属性相互依赖。
在某些极少数情况下,应用模块可能由多个程序集组成,其中只有一个程序集定义了模块类,其他程序集只是模块的一部分,而不是单独的模块。如果无法在目标程序集中定义模块类,或者不想依赖于某个模块的依赖项,则该特性就尤其有用。
在这种情况下,可以使用如下所示的 AdditionalAssembly
特性:
[DependsOn(...)] // 正常解析模块依赖
[AdditionalAssembly(typeof(IdentityServiceModule))] // 只解析目标程序集中的类型(在另一个程序集中)
public class IdentityServiceTestModule : AbpModule
{
//...
}
以上示例,使用 AdditionalAssembly
特性定义目标类型 IdentityServiceModule
,ABP Framework 将 IdentityServiceModule
类所在的程序集作为 IdentityServiceTestModule
模块的附加程序集进行加载。注意,在这种情况下,不会加载 IdentityServiceModule
的任何模块依赖项。
分布式事件支持关联ID(CorrelationId)
在此版本中, CorrelationId
作为分布式应用程序中用于跟踪跨多个服务或操作请求的唯一密钥,附加到分布式事件,因此可以将事件与HTTP请求关联起来,并可以跟踪所有相关的活动。
ABP Framework 在首次操作开始时生成 correlationId
,然后将当前 correlationId
作为附加属性附加到分布式事件。例如,如果使用 ABP Framework 提供的事务发件箱或收件箱模式,则可以在带有标准 X-Correlation-Id
键的 IncomingEventInfo
或 OutgoingEventInfo
类的额外属性中看到 correlationId
。
EF Core 数据库迁移系统
在此版本中,ABP Framework 提供了基类和事件来迁移数据库结构,并在应用程序启动时为数据库播种初始数据。该系统与多租户兼容,每当创建新租户或更新租户的数据库连接字符串时,都会检查并应用新租户的数据库迁移状态。
该系统对于迁移微服务的数据库特别有用。这样,当部署新版本的微服务时,不需要手动迁移其数据库。
需要执行以下操作才能使用数据库迁移系统:
o 创建一个从
类派生的类,重写并实现其
EfCoreRuntimeDatabaseMigratorBaseSeedAsync
方法。最后,在模块类的
方法中执行类的
OnPostApplicationInitializationAsync
方法。
CheckAndApplyDatabaseMigrationsAsynco 创建一个从
类派生的类,重写并实现其
DatabaseMigrationEventHandlerBaseSeedAsync
方法。然后,每当创建新租户或租户的连接字符串发生变化时,将执行SeedAsync
方法。
其他新闻
o 第三方引用类库升级:OpenIddict 库升级到
v4.7.0
o 新增
Volo.Abp.Maui.Client
包,由 MAUI 移动应用程序使用。o
类支持设置一个泛型类型参数,该参数应该是
AbpAspNetCoreIntegratedTestBaseStartup
类类型,有了这个参数就能够将 ABP 模块类类型传递给泛型类型参数,简化应用程序项目的测试。
教程推荐
《ABP Framework 极速开发》
《精读 Mastering ABP Framework》
引用链接
[1]
ABP.IO Platform 7.4 RC Has Been Published: https://blog.abp.io/abp/ABP.IO-Platform-7-4-RC-Has-Been-Published[2]
原文首发-知识乐 ABP Framework专题: https://www.zhishile.com/blogs/abp/abp-framework-7.4-rc[3]
模块开发基础文档: https://docs.abp.io/en/abp/7.4/Module-Development-Basics[4]
查看此问题: https://github.com/abpframework/abp/issues/16773