From c2370a6e6f721268f627f4def5245ac6932b8baf Mon Sep 17 00:00:00 2001 From: Falcon <12919280+falconfly@user.noreply.gitee.com> Date: Mon, 21 Apr 2025 17:08:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84ITaskManager=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E7=BB=8F=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AddSingletonWith.cs | 53 +++++++++++++++++++ .../{ => TaskManager}/ITaskManager.cs | 2 +- .../{ => TaskManager}/LastRunInformation.cs | 4 +- .../TimedTask/TaskManager/Readme.md | 5 ++ .../ServiceCollectionExtensions.cs | 24 +++++++++ .../{ => TaskManager}/TaskControlResult.cs | 4 +- .../TimedTask/{ => TaskManager}/TaskState.cs | 8 ++- 7 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs rename Falcon.SugarApi/TimedTask/{ => TaskManager}/ITaskManager.cs (97%) rename Falcon.SugarApi/TimedTask/{ => TaskManager}/LastRunInformation.cs (65%) create mode 100644 Falcon.SugarApi/TimedTask/TaskManager/Readme.md create mode 100644 Falcon.SugarApi/TimedTask/TaskManager/ServiceCollectionExtensions.cs rename Falcon.SugarApi/TimedTask/{ => TaskManager}/TaskControlResult.cs (62%) rename Falcon.SugarApi/TimedTask/{ => TaskManager}/TaskState.cs (78%) diff --git a/Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs b/Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs new file mode 100644 index 0000000..1f5c1b2 --- /dev/null +++ b/Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Falcon.SugarApi.ServiceCollectionExtend +{ + /// + /// 单实例多接口注册 + /// + public static class AddSingletonWithExtend + { + /// + /// 单实例+多接口注册。 + /// + /// 实例的类型 + /// 服务集合 + /// 要注册的服务类型,必须为接口 + /// 服务集合 + public static IServiceCollection AddSingletonWith(this IServiceCollection services,params Type[] serviceTypes) + where TInstance : class { + services.TryAddSingleton(); + foreach(var t in serviceTypes) { + if(!t.IsInterface) + throw new ArgumentException($"类型 {t.FullName} 不是接口"); + if(typeof(TInstance).GetInterfaces().Contains(t)) { + services.AddSingleton(t,p => p.GetRequiredService()); + } + } + return services; + } + + /// + /// 单实例+多接口注册。 + /// + /// 实例的类型 + /// 服务集合 + /// 实例对象 + /// 要注册的接口类型 + /// 服务集合 + public static IServiceCollection AddSingletonWith(this IServiceCollection services,TInstance instance,params Type[] serviceTypes) + where TInstance : class { + services.TryAddSingleton(instance); + foreach(var t in serviceTypes) { + if(typeof(TInstance).GetInterfaces().Contains(t)) { + services.AddSingleton(t,p => p.GetRequiredService()); + } + } + return services; + } + } +} diff --git a/Falcon.SugarApi/TimedTask/ITaskManager.cs b/Falcon.SugarApi/TimedTask/TaskManager/ITaskManager.cs similarity index 97% rename from Falcon.SugarApi/TimedTask/ITaskManager.cs rename to Falcon.SugarApi/TimedTask/TaskManager/ITaskManager.cs index dda5359..4d1a99a 100644 --- a/Falcon.SugarApi/TimedTask/ITaskManager.cs +++ b/Falcon.SugarApi/TimedTask/TaskManager/ITaskManager.cs @@ -1,7 +1,7 @@ using System.Threading; using System.Threading.Tasks; -namespace Falcon.SugarApi.TimedTask +namespace Falcon.SugarApi.TimedTask.TaskManager { /// /// 任务管理接口 diff --git a/Falcon.SugarApi/TimedTask/LastRunInformation.cs b/Falcon.SugarApi/TimedTask/TaskManager/LastRunInformation.cs similarity index 65% rename from Falcon.SugarApi/TimedTask/LastRunInformation.cs rename to Falcon.SugarApi/TimedTask/TaskManager/LastRunInformation.cs index 7a97138..f0535fd 100644 --- a/Falcon.SugarApi/TimedTask/LastRunInformation.cs +++ b/Falcon.SugarApi/TimedTask/TaskManager/LastRunInformation.cs @@ -1,6 +1,6 @@ using System; -namespace Falcon.SugarApi.TimedTask +namespace Falcon.SugarApi.TimedTask.TaskManager { /// /// 任务上次运行结果信息 @@ -8,5 +8,5 @@ namespace Falcon.SugarApi.TimedTask /// 是否成功 /// 运行时间 /// 运行信息 - public record LastRunInformation(bool IsSuccess,DateTime Time,string? Msg); + public record LastRunInformation(bool IsSuccess, DateTime Time, string? Msg); } diff --git a/Falcon.SugarApi/TimedTask/TaskManager/Readme.md b/Falcon.SugarApi/TimedTask/TaskManager/Readme.md new file mode 100644 index 0000000..9312db3 --- /dev/null +++ b/Falcon.SugarApi/TimedTask/TaskManager/Readme.md @@ -0,0 +1,5 @@ +## ̨ģ TimedTask + +еĺ̨ҪʵITaskManagerӿڡ + +ȻʹServers.AddTaskWithManagerעᡣûʵITaskManagerĺֱ̨ʹServices.AddHostedServiceעᡣ diff --git a/Falcon.SugarApi/TimedTask/TaskManager/ServiceCollectionExtensions.cs b/Falcon.SugarApi/TimedTask/TaskManager/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..8889f53 --- /dev/null +++ b/Falcon.SugarApi/TimedTask/TaskManager/ServiceCollectionExtensions.cs @@ -0,0 +1,24 @@ +using Falcon.SugarApi.ServiceCollectionExtend; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Falcon.SugarApi.TimedTask.TaskManager +{ + /// + /// 服务注册扩展 + /// + public static class ServiceCollectionExtensions + { + /// + /// 注册后台任务服务,并同时注册任务管理 + /// + /// 后台任务的类型 + /// 服务集合 + /// 服务集合 + public static IServiceCollection AddTimedTaskWithManager(this IServiceCollection services) + where T : class { + services.AddSingletonWith(typeof(IHostedService),typeof(ITaskManager)); + return services; + } + } +} diff --git a/Falcon.SugarApi/TimedTask/TaskControlResult.cs b/Falcon.SugarApi/TimedTask/TaskManager/TaskControlResult.cs similarity index 62% rename from Falcon.SugarApi/TimedTask/TaskControlResult.cs rename to Falcon.SugarApi/TimedTask/TaskManager/TaskControlResult.cs index 1a825a4..34a63a2 100644 --- a/Falcon.SugarApi/TimedTask/TaskControlResult.cs +++ b/Falcon.SugarApi/TimedTask/TaskManager/TaskControlResult.cs @@ -1,11 +1,11 @@ using System; -namespace Falcon.SugarApi.TimedTask +namespace Falcon.SugarApi.TimedTask.TaskManager { /// /// 任务控制返回结果 /// /// 是否成功 /// 返回信息 - public record TaskControlResult(bool isSuccess,string msg); + public record TaskControlResult(bool isSuccess, string msg); } diff --git a/Falcon.SugarApi/TimedTask/TaskState.cs b/Falcon.SugarApi/TimedTask/TaskManager/TaskState.cs similarity index 78% rename from Falcon.SugarApi/TimedTask/TaskState.cs rename to Falcon.SugarApi/TimedTask/TaskManager/TaskState.cs index da717e4..fb8691b 100644 --- a/Falcon.SugarApi/TimedTask/TaskState.cs +++ b/Falcon.SugarApi/TimedTask/TaskManager/TaskState.cs @@ -1,10 +1,14 @@ -namespace Falcon.SugarApi.TimedTask +namespace Falcon.SugarApi.TimedTask.TaskManager { /// /// 任务状态 /// public enum TaskState { + /// + /// 任务准备中 + /// + Init, /// /// 准备-任务准备就绪等待开始执行 /// @@ -18,7 +22,7 @@ /// Running, /// - /// 停止-任务已经停止,不会再运行 + /// 停止-任务停止状态,可再次运行 /// Stopping, ///