完善ITaskManager模块,经过测试
This commit is contained in:
parent
4ece07fa8c
commit
c2370a6e6f
53
Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs
Normal file
53
Falcon.SugarApi/ServiceCollectionExtend/AddSingletonWith.cs
Normal file
|
@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// 单实例多接口注册
|
||||
/// </summary>
|
||||
public static class AddSingletonWithExtend
|
||||
{
|
||||
/// <summary>
|
||||
/// 单实例+多接口注册。
|
||||
/// </summary>
|
||||
/// <typeparam name="TInstance">实例的类型</typeparam>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <param name="serviceTypes">要注册的服务类型,必须为接口</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddSingletonWith<TInstance>(this IServiceCollection services,params Type[] serviceTypes)
|
||||
where TInstance : class {
|
||||
services.TryAddSingleton<TInstance>();
|
||||
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<TInstance>());
|
||||
}
|
||||
}
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 单实例+多接口注册。
|
||||
/// </summary>
|
||||
/// <typeparam name="TInstance">实例的类型</typeparam>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <param name="instance">实例对象</param>
|
||||
/// <param name="serviceTypes">要注册的接口类型</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddSingletonWith<TInstance>(this IServiceCollection services,TInstance instance,params Type[] serviceTypes)
|
||||
where TInstance : class {
|
||||
services.TryAddSingleton<TInstance>(instance);
|
||||
foreach(var t in serviceTypes) {
|
||||
if(typeof(TInstance).GetInterfaces().Contains(t)) {
|
||||
services.AddSingleton(t,p => p.GetRequiredService<TInstance>());
|
||||
}
|
||||
}
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Falcon.SugarApi.TimedTask
|
||||
namespace Falcon.SugarApi.TimedTask.TaskManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务管理接口
|
|
@ -1,6 +1,6 @@
|
|||
using System;
|
||||
|
||||
namespace Falcon.SugarApi.TimedTask
|
||||
namespace Falcon.SugarApi.TimedTask.TaskManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务上次运行结果信息
|
||||
|
@ -8,5 +8,5 @@ namespace Falcon.SugarApi.TimedTask
|
|||
/// <param name="IsSuccess">是否成功</param>
|
||||
/// <param name="Time">运行时间</param>
|
||||
/// <param name="Msg">运行信息</param>
|
||||
public record LastRunInformation(bool IsSuccess,DateTime Time,string? Msg);
|
||||
public record LastRunInformation(bool IsSuccess, DateTime Time, string? Msg);
|
||||
}
|
5
Falcon.SugarApi/TimedTask/TaskManager/Readme.md
Normal file
5
Falcon.SugarApi/TimedTask/TaskManager/Readme.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
## 后台任务模块 TimedTask 任务管理
|
||||
|
||||
插件中的后台任务需要实现ITaskManager接口。
|
||||
|
||||
然后使用Servers.AddTaskWithManager进行注册。没有实现ITaskManager的后台任务可以直接使用Services.AddHostedService进行注册。
|
|
@ -0,0 +1,24 @@
|
|||
using Falcon.SugarApi.ServiceCollectionExtend;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Falcon.SugarApi.TimedTask.TaskManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 服务注册扩展
|
||||
/// </summary>
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 注册后台任务服务,并同时注册任务管理
|
||||
/// </summary>
|
||||
/// <typeparam name="T">后台任务的类型</typeparam>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddTimedTaskWithManager<T>(this IServiceCollection services)
|
||||
where T : class {
|
||||
services.AddSingletonWith<T>(typeof(IHostedService),typeof(ITaskManager));
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace Falcon.SugarApi.TimedTask
|
||||
namespace Falcon.SugarApi.TimedTask.TaskManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务控制返回结果
|
||||
/// </summary>
|
||||
/// <param name="isSuccess">是否成功</param>
|
||||
/// <param name="msg">返回信息</param>
|
||||
public record TaskControlResult(bool isSuccess,string msg);
|
||||
public record TaskControlResult(bool isSuccess, string msg);
|
||||
}
|
|
@ -1,10 +1,14 @@
|
|||
namespace Falcon.SugarApi.TimedTask
|
||||
namespace Falcon.SugarApi.TimedTask.TaskManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务状态
|
||||
/// </summary>
|
||||
public enum TaskState
|
||||
{
|
||||
/// <summary>
|
||||
/// 任务准备中
|
||||
/// </summary>
|
||||
Init,
|
||||
/// <summary>
|
||||
/// 准备-任务准备就绪等待开始执行
|
||||
/// </summary>
|
||||
|
@ -18,7 +22,7 @@
|
|||
/// </summary>
|
||||
Running,
|
||||
/// <summary>
|
||||
/// 停止-任务已经停止,不会再运行
|
||||
/// 停止-任务停止状态,可再次运行
|
||||
/// </summary>
|
||||
Stopping,
|
||||
/// <summary>
|
Loading…
Reference in New Issue
Block a user