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