内容简介:让 .NET 开发更简单,更通用,更流行。 发展大事记 自 Furion 诞生一来得到高速发展最大的原因是弥补了 .NET 这么多年没有对标 Java Spring 的框架,所以 Furion 的诞生迅速吸引了非常多的 .NET 开发者,QQ 群成员...
让 .NET 开发更简单,更通用,更流行。
发展大事记
自 Furion 诞生一来得到高速发展最大的原因是弥补了 .NET 这么多年没有对标 Java Spring 的框架,所以 Furion 的诞生迅速吸引了非常多的 .NET 开发者,QQ 群成员达到了 5500 人+。
以下是 Furion 的发展大事记:
- 2020 年
- 2020 年 06 月 29 日,在百小僧公司成立 8 周年之际在 Gitee 平台创建了 Fur 仓库。
- 2020 年 09 月 01 日,正式写下第一行代码。
- 2020 年 10 月 22 日,Fur 在 Gitee 平台获得 1000 stars.
- 2020 年 11 月 11 日,单身节当天发布了 1.0.0 正式版。
- 2020 年 11 月 20 日,Fur 改名为 Furion。
- 2020 年 11 月 23 日,Furion Logo 由之前的 奶牛 更换为 袋鼠。
- 2020 年 12 月 22 日,Furion 在 Gitee 平台获得 2000 stars。
- 2021 年
- 2021 年 02 月 20 日,Furion 捐赠项目到 dotNET China 组织。
- 2021 年 03 月 05 日,Furion 在 Gitee 平台获得 3000 stars。
- 2021 年 04 月 01 日,Furion 所在群 dotNET China 突破 5000 人。
- 2021 年 04 月 06 日,Furion 在 Gitee 平台获得 4000 stars。
- 2021 年 04 月 19 日,Furion 正式发布 2.0.0 版本。
优秀的贡献者们
Furion 提供完善的代码注释和文档说明,以至于吸引了超过 110 个贡献者贡献代码。 感谢每一位为 Furion 贡献代码的朋友。
2.0.0 版本为什么来的那么快
通过上面的大事记可以看出,Furion 从 1.0.0 版本过渡到了 2.0.0 版本只用了 5 个月的时间。相对于大部分的开源软件来说,这是非常短的主版本迭代周期。但是为什么依然需要发布 2.0.0 版本呢?有以下原因:
- 创造 Furion 之初没想到该项目短短几个月发展的如此之快,所以 1.x 版本很多功能代码都为了功能开发而开发,在架构设计、灵活维护性及性能方面处理不妥,导致后续拓展新功能带来了不少麻烦,可以说是在功能中制造更多的漏洞。
- 在这 7 个月开源中,每天面对使用者的庞大需求及用户指数增长的威压下,对 .NET 有了更高层次的理解。
- 开源过程中认识了很多朋友,也收获了 112 个贡献者对代码的改进,在他们贡献的代码中也让自己成长了不少。
- 最后一个是为了迎接 .NET 6 版本的到来。
所以,综上所述,花了近 15 天的时间对 Furion 的底层架构进行了大面积的重构及优化,其中包括删除了近 2700 行代码,31 个文件及底层架构模式的重大调整。
2.0.0 有什么亮点
亮点一:支持控制台应用程序开发
Furion 不再局限于 Web 应用开发还额外支持控制台应用程序开发。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.Inject();
}
}
亮点二:内置强大的任务调度
// 每隔 1s 执行
SpareTime.Do(1000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH????????ss"));
Console.WriteLine($"一共执行了:{count} 次");
});
SpareTime.Do("* * * * *", (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH????????ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, "cronName", "每分钟执行一次");
亮点三:支持跨平台的守护进程服务
using Furion.TaskScheduler;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace WorkerService1
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// 执行 Cron 表达式任务
await SpareTime.DoAsync("*/5 * * * * *", () =>
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}, stoppingToken, CronFormat.IncludeSeconds);
}
}
}
}
亮点四:支持 Anno + Furion 微服务开发
亮点五:功能文档已经全部完成
本期更新
新特性
- [新增] 控制台应用程序及 Worker Services 支持 #I3K4DG
- [新增] 完整任务调度功能 #I3IRUX
- [新增]
Cron
表达式解析 #I3IQ9Y- [新增] 支持
Swagger
自定义配置swagger.json
地址模板 #I3IHMX- [新增] 支持配置动态 WebApi 区域 #I3IJAZ
- [新增] 远程请求新增支持传入服务提供器
IServiceProvider
#I3IVBL- [新增] 全局配置选型
SupportPackageNamePrefixs
配置,支持配置包前缀 #I3K0SN- [新增] 应用启动时支持
referenceassembly
类型程序集扫描 #I3K0SN突破性变化
- [重构] 完整任务调度功能 #I3IRUX
- [重构] 日志模块功能 #I3J2K0
- [重构] 模板引擎功能 #I3J46E
- [重构] 底层
EFCoreRepository
仓储 #I3J6W5- [重构] sql 字符串拓展底层代码 #I3IVCE
- [重构] 底层
SqlRepository
所有逻辑代码 #I3J6V6- [重构] 数据库实体拓展方法 #I3J609
- [调整] 事件事件总线同步执行为异步方式执行 #I3J0WA
- [移除] 框架底层
HttpContext.IsAjaxRequest()
拓展 #I3IVAA- [移除]
ValidationTypes.Required
验证 #I3KR85问题修复
- [修复] 关闭
InjectMiniProfiler
参数后内存缓存无效 #I3IHLR- [修复] 在多租户中调用
Tenant
属性出现偶然性数据库上下文被释放的情况 #I3IC70- [修复] Sql 代理中如果返回基元类型抛出不能将 object 转换成对应类型的异常 #I3IC84
- [修复] 存储过程多返回值的时候,outputvalues 的 name 不是定义的 MSG 的 name,是 Msg 类型。 #I3IC7Y
- [修复] PhoneNumber 手机号验证正则表达式错误 #I3ID10
- [修复] 依赖注入 AOP 拦截无法捕获内部异常 #I3IGCC
- [修复] 全局拦截标记异常已被处理后异常过滤器依然执行 #I3J463
- [修复] 自定义全局异常拦截器不起作用 #I3K1SJ
- [修复] 在 WorkerService 模式下,还是使用 WebHostEnvironment 来判断 Host 环境,会导致错误 #I3LCQY
- [修复] 定时任务
DoOnce
抛空异常 bug #I3M0ZT其他更改
文档变化
问答答疑
- [答疑] 数据校验,自定义 ErrorMessage 无效问题 #I3ICL3
- [答疑] 最新 issue 中新增的“新增常用的 JSON 序列化方法” 会导致 AOP 拦截异常 #I3I7VE
- [答疑] Furion.DatabaseAccessor.PrivateEntityBase 中的 TenantId 数据类型设置为 object #I3IQV6
- [答疑] 有关异常拦截和处理的疑问 #I3IUFZ
- [答疑]
DataValidation
在空值的情况下被忽略掉了#I3IWSM- [答疑] 日志文档没有更新 #I3J1DX
- [答疑] 对于 webapi 简单类型参数,是否可以以 json 方式提交 #I3J18I
- [答疑]
IUnifyResultProvider
实现中如果UnifyModel
的 type 不是范型会报错 #I3JBXF- [答疑] 如何模块化开发新功能? #I3J7ZZ
- [答疑] 建议增加微服务中间件的集成 #I3JTZQ
不做实现
文档地址
项目地址
- Gitee:https://gitee.com/dotnetchina/Furion
- GitHub:https://github.com/monksoul/Furion
- Docker:https://hub.docker.com/r/monksoul/furion
- Nuget:https://www.nuget.org/packages/Furion
Furion 遵循 Apache-2.0 开源协议,欢迎大家提交 PR 或 Issue。喜欢可以给个 Star。
以上所述就是小编给大家介绍的《Furion 2.0.0:.NET 开发者不可忽视的框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 开源Android容器化框架Atlas开发者指南
- 中美摩擦之下,如何选择适合中国开发者的移动端深度学习框架?
- Java开发者必须掌握的15个框架(20k是小问题)
- 最适合中国开发者的深度学习框架:走向成熟的PaddlePaddle 1.0
- 深度学习框架不能“包治百病”,开发者如何选出最适合自己的?
- 掘金 AMA:听阿里 Node 基础框架 EggJS 的核心开发者--天猪讲 EggJS 和 Node 那些事
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
游戏人工智能编程案例精粹
巴克兰德 (Mat Buckland) / 罗岱 / 人民邮电出版社 / 2008年06月 / 55.00元
《游戏人工智能编程案例精粹》适合对游戏AI开发感兴趣的爱好者和游戏AI开发人员阅读和参考。一起来看看 《游戏人工智能编程案例精粹》 这本书的介绍吧!