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, ///