6K Star 11.8K Fork 4K

GVPdotNET China / Furion

 / 详情

📝 发布 Furion v4.8.7 版本

已完成
拥有者
创建于  
2023-02-22 12:11

版本说明

发布 FurionFurion.ToolsFurion.Xunit v4.8.7 版本,适配 .NET8 Preview.1

https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-1/

本期更新


本期亮点

1. LoggingMonitor 支持跳过特定参数记录

Furion 4.8.7.3+ 版本新增 [SuppressMonitor] 特性支持标记参数(支持类型,方法)不被记录,如:

[LoggingMonitor]
public string GetName([SuppressMonitor]SomeType type, int id)   // type 参数将跳过记录
{
    return nameof(Furion);
}

2. Sql 高级代理支持 IEnumerable<T>T[]Tuple<(IEnumerable<T>, T[], T, List<T>) 混合返回值

public interface ISql : ISqlDispatchProxy
{
    [SqlExecute("select * from person where id = @id")]
    Person GetPerson(int id);

    [SqlExecute("select * from person where id = @id")]
    Task<Person> GetPersonAsync(int id);    // 异步

    // ----------------------------------------

    [SqlExecute("select * from person")]
    List<Person> GetPersons();

    [SqlExecute("select * from person")]
    Task<List<Person>> GetPersonsAsync();    // 异步

    // ----------------------------------------    

    [SqlExecute("select * from person")]
    Person[] GetPersons();

    [SqlExecute("select * from person")]
    Task<Person[]> GetPersonsAsync();    // 异步

    // ----------------------------------------

    [SqlExecute("select * from person")]
    IEnumerable<Person> GetPersons2();

    [SqlExecute("select * from person")]
    Task<IEnumerable<Person>> GetPersons2Async();    // 异步

    // ----------------------------------------

    // 更复杂的组合
    [SqlExecute(@"
select * from person where id = 1;
select * from person;
select * from person where id > 0;
select * from person where id > 0;
")]
    (Person, List<Person>, Person[], IEnumerable<Person>) GetPersons();
    
        // 更复杂的组合
    [SqlExecute(@"
select * from person where id = 1;
select * from person;
select * from person where id > 0;
select * from person where id > 0;
")]
    Task<(Person, List<Person>, Person[], IEnumerable<Person>)> GetPersonsAsync();    // 异步
}

3. 定时任务支持 Http 作业

HTTP 请求作业通常用于定时请求/访问互联网地址。

services.AddSchedule(options =>
{
      options.AddHttpJob(request =>
      {
            request.RequestUri = "https://www.chinadot.net";
            request.HttpMedhod = HttpMethod.Get;
            // request.Body = "{}"; // 设置请求报文体
      }, Triggers.PeriodSeconds(5));
});

作业执行日志如下:

info: 2023-03-11 11:05:36.3616747 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service is running.
info: 2023-03-11 11:05:36.3652411 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service is preloading...
info: 2023-03-11 11:05:36.5172940 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      The <job1_trigger1> trigger for scheduler of <job1> successfully appended to the schedule.
info: 2023-03-11 11:05:36.5189296 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      The scheduler of <job1> successfully appended to the schedule.
warn: 2023-03-11 11:05:36.5347816 +08:00 星期六 L System.Logging.ScheduleService[0] #1
      Schedule hosted service preload completed, and a total of <1> schedulers are appended.
warn: 2023-03-11 11:05:41.5228138 +08:00 星期六 L System.Logging.ScheduleService[0] #15
      Schedule hosted service will sleep <4970> milliseconds and be waked up at <2023-03-11 11:05:46.486>.
info: 2023-03-11 11:05:41.5542865 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.LogicalHandler[100] #9
      Start processing HTTP request GET https://www.chinadot.net/
info: 2023-03-11 11:05:41.5589056 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.ClientHandler[100] #9
      Sending HTTP request GET https://www.chinadot.net/
info: 2023-03-11 11:05:44.1305461 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.ClientHandler[101] #8
      Received HTTP response headers after 2566.7836ms - 200
info: 2023-03-11 11:05:44.1343977 +08:00 星期六 L System.Net.Http.HttpClient.HttpJob.LogicalHandler[101] #8
      End processing HTTP request after 2584.2327ms - 200
info: 2023-03-11 11:05:48.6475959 +08:00 星期六 L System.Logging.ScheduleService[0] #4
      Received HTTP response body with a length of <63639> output as follows - 200
      <!DOCTYPE html><html><head>
            <title>dotNET China | 让 .NET 开发更简单,更通用,更流行</title>
      ......
          </body></html>

4. 调整定时任务动态作业 DynamicJob 委托/方法签名

为了统一动态作业和普通作业的 ExecuteAsync 方法签名,故做出调整。

由:

options.AddJob((serviceProvider, context, stoppingToken) =>
{
      serviceProvider.GetLogger().LogInformation($"{context}");
      return Task.CompletedTask;
}, Triggers.PeriodSeconds(5));

调整为:

options.AddJob((context, stoppingToken) =>
{
      context.ServiceProvider.GetLogger().LogInformation($"{context}");
      return Task.CompletedTask;
}, Triggers.PeriodSeconds(5));

5. 远程请求 HttpRequestMessage 拓展方法 AppendHeaders

如需动态设置,可使用以下方式(添加参数拦截拦截器):

public interface IHttp : IHttpDispatchProxy
{
    // 通过参数拦截
    [Post("https://furion.baiqian.ltd/post")]
    Task<HttpResponseMessage> PostXXXAsync(string name, [Interceptor(InterceptorTypes.Request)] Action<HttpClient, HttpRequestMessage> action = default);
}

调用:

_http.PostXXXAsync("百小僧", (client, requestMessage) =>
{
    requestMessage.AppendHeaders(new Dictionary<string , object> {
        { "Authorization", "Bearer 你的token"},
        { "X-Authorization", "Bearer 你的刷新token"}
    });

    // 也支持对象,匿名方式
    requestMessage.AppendHeaders(new {
        Authorization = "Bearer 你的token",
        Others = "其他"
    });

    // 也可以使用原生
    requestMessage.Headers.TryAddWithoutValidation("Authorization", "Bearer 你的token");
    requestMessage.Headers.TryAddWithoutValidation("key", "value");
});

6. 定时任务立即执行方法

// 带返回值
var scheduleResult = _schedulerFactory.TryRunJob("job1");
// 不带返回值
_schedulerFactory.RunJob("job1");

7. 粘土对象可转换成 IEnumerable<T> 对象并实现 Lambda/Linq 操作

dynamic clay = Clay.Parse("{\"Foo\":\"json\",\"Bar\":100,\"Nest\":{\"Foobar\":true},\"Arr\":[\"NOR\",\"XOR\"]}");

// 将 clay.Arr 转换成 IEnumerable<dynamic>
IEnumerable<dynamic> query = clay.Arr.AsEnumerator<dynamic>();

// 实现 Lambda/Linq 操作
var result = query.Where(u => u.StartsWith("N"))
                  .Select(u => new
                  {
                      Name = u
                  })
                  .ToList();

文档更新

输入图片说明

输入图片说明

评论 (14)

百小僧 创建了任务
百小僧 添加了
 
重大调整
标签
百小僧 添加了
 
文档
标签
百小僧 修改了描述
百小僧 任务状态待办的 修改为已完成
百小僧 置顶等级 修改为不置顶
展开全部操作日志

2023年02月22日(今日),微软发布了 .NET8 Preview.1 版本,花了 4 个小时将 Furion 进行升级适配,解决了 3 处破坏性更改,11 处代码适配调整,超 9000个单元测试 100% 测试通过。

从今日开始,任何 Furion 版本(v0.x,v1.x,v2.x,v3.x,v4.x)都可以直接升级到最新版 v4.8.7,应用层无任何破坏性更改,底层全部做了兼容处理。

同时 Furion v5 彻底无依赖版本也做出相应调整,直接 .NET8 起步。

https://furion.baiqian.ltd/

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

百小僧 修改了描述

旧版本

输入图片说明

新版本

输入图片说明

支持支持!!!!!

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

预告 v4 版本最后一个新模块:👍邮件发送👍,将在下一个次版本 v4.8.8 发布。

邮件发送几乎是所有应用系统都必备的功能,过去大家都使用第三方 Mailkit 或者 FluntMail 等第三方模块。所以慎重考虑后,Furion 决定自己写邮件发送功能,不断迭代至完善,这样功能完全可控,出问题第一时间修复,想要什么功能就可以搞。

Furion 已经内置了很多系统必备的模块了,比如日志模块,定时任务模块,模板引擎模块等等,再也不用使用第三方了。😊

功能必须自主可控是 Furion 的初心,v5 版本将实现彻彻底底无第三方依赖,自己写 Swagger,自己写 Mapper

没了第三方,就不用等第三方更新了,只有我的速度才能跟上你们项目迭代的速度,不加班是我们的倔强

:smile: 老版本要是能无缝升级就好了

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

Furion v4.8.7.10 版本发布,具体改进:

输入图片说明

输入图片说明

百小僧 修改了描述
百小僧 修改了描述

2023年03月15日,.NET 8 Preview 2.NET 7.0.5.NET6.0.15 发布

https://devblogs.microsoft.com/dotnet/march-2023-updates/


ASP.NET 8 Preview 2 主要变化

[FromBody] 特性现在支持多个了

输入图片说明

EFCore 8 Preview 2 主要变化

Sqlite 支持 JSON 列了

支持 Tree 型查询了(递归)!重大支持

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

Furion v4.8.7 版本迭代了 24天 了,没想到还能修复 7个 问题。这是这近一个月修复的所有问题。

当然,问题越来越少,越来越难发现了

输入图片说明

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

2023年02月22日,发布了 v4.8.7.0 版本

输入图片说明

不知不觉又迭代了一个月,版本到了 v4.8.7.18,包含 21个 新特性,修复 14个 问题,5个 代码调整,文档增加了约 7000多 字。

输入图片说明

输入图片说明


接下来就是 v4.8.8.x 版本(每个版本迭代一个月),主要亮点就是新增 邮件收发模块,明天开始~

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

Furion v4.8.7.29 版本发布,支持 Web 项目发布成 WinForm/WPF 桌面应用程序啦,类似前端 ElectronTauri 技术

输入图片说明

百小僧 修改了描述

Furion v4.8.7.31 版本新增了非常方便修改作业触发器触发时间的方法

输入图片说明

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

自2023.02.22日 至现在,修复了不少 Bug

问题修复

输入图片说明

新特性

输入图片说明

其他

输入图片说明

百小僧 修改了描述
百小僧 修改了描述
百小僧 修改了描述

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助