🦉 想只有困难,做才有答案 | .NET 框架 Furion v4.9.2.14
董宇辉说:” 行就是知,知就是行。想,只有困难;做,才有答案。“
其实多数时候,我们想得太多了,实际去做的太少了。就好像写这个内容时想的是个中长篇,可真正话到手上只有寥寥数语。
做事何尝不是如此,光有 idea 是不值钱的!
时间能改变许多人和事,同样也能冲淡许多记忆,但更能证明许多人与事的价值。
追溯 Furion 的诞生之初,借助 Gitee 的看板功能,将每一个任务都细致入微地规划好,并逐一将其化为现实。那时的我,心中并无太多纷扰与顾虑,只是怀揣着对技术的热爱与追求,全身心投入到完善框架功能的征途上。然而,命运的轮盘总是如此神奇,未曾料到,Furion 框架已如雨后春笋般蓬勃发展,其影响力与日俱增,正逐步迈向更广阔的未来。
只是,物非人非,今昔何异,心随境转梦难寻。
2020 年,Furion 第一个版本
2024年,Furion 第四个版本
本期亮点
1. 添加定时任务批量设置作业组名称 GroupSet
默认情况下,若需为单个或多个作业批量设置 GroupName,以往需采用以下的方式,这在代码层面显得较为冗长。
services.AddSchedule(options =>
{
// 为 group1 添加作业,并手动设置该作业组名称
- options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group1"), Triggers.Secondly());
- options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group1"), Triggers.Hourly());
// 为 group2 添加作业,并手动设置该作业组名称
- options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group2"), Triggers.Secondly());
- options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group2"), Triggers.Hourly());
// 添加未设置作业组名称的作业
options.AddJob<MyJob>(Triggers.Secondly());
});
在最新版本中,我们提供了更为简洁的方式来实现:
services.AddSchedule(options =>
{
// 为 group1 添加作业,并自动应用该作业组名称
+ options.GroupSet("group1", () =>
+ {
+ options.AddJob<MyJob>(Triggers.Secondly());
+ options.AddJob<MyJob>(Triggers.Hourly());
+ });
// 为 group2 添加作业,并自动应用该作业组名称
+ options.GroupSet("group2", () =>
+ {
+ options.AddJob<MyJob>(Triggers.Secondly());
+ options.AddJob<MyJob>(Triggers.Hourly());
+ });
// 添加未设置作业组名称的作业
options.AddJob<MyJob>(Triggers.Secondly());
});
通过options.GroupSet方法,我们能够为指定作业组添加多个作业,且这些作业会自动应用该组的名称,大大简化了代码书写过程。同时,未在此方法内添加的作业将默认不设置作业组名称。这样的设计既提升了代码的可读性,也方便了作业组的管理与配置。
2. 完善模块化加载插件程序集底层引擎
以往,模块化加载拓展程序集 dll 文件的方式仅限于指定完整的 .dll 路径,缺乏目录扫描的支持,这在需要频繁添加多个 .dll 文件的场景下,无疑增加了操作的复杂性,显得尤为繁琐。
{
"AppSettings": {
// 需要把 plugins 一个个 dll 添加上来
- "ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...]
}
}
现在,新版本已经引入了目录配置功能,实现了自动扫描指定目录下的 .dll 文件,大大简化了操作过程,提升了效率。
{
"AppSettings": {
+ "ExternalAssemblies": ["plugins"] // 只需要提供 plugins 目录即可(同样支持上面的方式)
}
}
3. 重写粘土对象底层引擎,提供更加灵活、智能的类 JavaScript 对象操作方式
最近我们发布了三个关于粘土对象 Clay 的版本,这主要是因为一位 VIP 用户的系统需求中涉及到了动态构建对象的复杂操作。
我们非常感激这位用户,正是他业务的高复杂度,使我们发现了粘土对象在灵活性、智能性以及隐藏 Bug 方面存在的问题。这些反馈促使我们对粘土对象模块进行了深入优化和提升。
我们之所以在短时间内发布了多个版本,正是为了快速响应并满足他反复提出的需求和问题,确保系统的稳定性和性能得到进一步提升。
本期更新
-
新特性
-
问题修复
- [修复] 定时任务生成
PostgreSQL数据库SQL语句的字段名缺少"双引号 4.9.2.13 ⏱️2024.04.10 #I9FD9Y - [修复] 定时任务使用
JobBuilder构建委托作业永远无法执行问题 4.9.2.10 ⏱️2024.04.10 Sundial#I7KU7K - [修复] 规范化结果在未启用
401/403等状态码中间件时进行了错误拦截 4.9.2.8 ⏱️2024.04.08 b135e8c - [修复] 客户端设置
JWT Token时如果Bearer后面跟多个空格导致验证失败问题 4.9.2.8 ⏱️2024.04.08 @xuejf168 !874 - [修复]
SQL查询结果转模型不支持DateOnly和TimeOnly属性类型 4.9.2.7 ⏱️2024.04.04 31f9d23 - [修复] 粘土对象调整原先类型并设置混合类型异常问题 4.9.2.6 ⏱️2024.04.03 83b216f
- [修复] 粘土对象将
Object类型设置给Array类型出现递归死循环问题 4.9.2.5 ⏱️2024.04.03 1126c74 - [修复] 粘土对象不支持嵌套粘土对象问题 4.9.2.4 ⏱️2024.04.02 fcb1223
- [修复] 粘土对象序列化后出现二次序列化成字符串问题 4.9.2.4 ⏱️2024.04.02 fcb1223
- [修复] 在
.NET8之后修改System.Text.Json默认序列化选项引发This JsonSerializerOptions instance is read-only or has already been used in serialization or deserialization.异常问题 4.9.2.2 ⏱️2024.03.29 9f44653 - [修复] 远程请求
IHttpDispatchProxy模式配置重试策略无效 4.9.2.1 ⏱️2024.03.29 #I9CK7X
- [修复] 定时任务生成
-
其他更改
- [调整] 默认
System.Text.Json序列化提供器选项为不区分大小写匹配 4.9.2.1 ⏱️2024.03.29 b58e7be
- [调整] 默认
-
文档
- [更新] 事件总线文档、定时任务文档、规范化接口文档、远程请求文档、粘土对象文档、
FS静态类文档、序列化文档
- [更新] 事件总线文档、定时任务文档、规范化接口文档、远程请求文档、粘土对象文档、
-
贡献者





