FreeScheduler 在asp.net core 中使用依赖注入的方式进行注入使用
1. 创建 SchedulerTask.cs 类 ,代码如下
public class SchedulerTask { private readonly ILogger<SchedulerTask> _logger; private readonly IServiceScopeFactory _serviceScopeFactory;public SchedulerTask(ILogger<SchedulerTask> logger, IServiceScopeFactory serviceScopeFactory) { _logger = logger; _serviceScopeFactory = serviceScopeFactory; } public async Task ExecuteAsync(TaskInfo task) { if (task.Topic == "test") { //调用其他服务 using (var scope = _serviceScopeFactory.CreateScope()) { var xxx = scope.ServiceProvider.GetRequiredService<xxx>(); } } } }
2.在main 函数中注入
public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); //开始注入 builder.Services.AddSingleton<SchedulerTask>(); Func<IServiceProvider, Scheduler> schedulerFactory = r => { var schedulerTask = r.GetRequiredService<SchedulerTask>(); return new FreeSchedulerBuilder() .OnExecuting(task => { schedulerTask.ExecuteAsync(task).Wait(); //加wait 任务可以顺延 }) .UseTimeZone(TimeSpan.FromHours(8)) .Build(); }; builder.Services.AddSingleton(schedulerFactory); var app = builder.Build(); //程序启动时添加任务 using (var scope = app.Services.CreateScope()) { var scheduler = scope.ServiceProvider.GetRequiredService<Scheduler>(); scheduler.AddTask("test", "test", -1, 3); } app.UseFreeSchedulerUI("/freescheduler/"); app.UseAuthorization(); app.MapControllers(); app.Run(); } }
3. 其他地方使用
[Route("api/[controller]/[action]")] [ApiController] public class SchedulerController : ControllerBase { private readonly Scheduler _scheduler; public SchedulerController(Scheduler scheduler) { _scheduler = scheduler; } [HttpGet] public void AddTask(string topic) { _scheduler.AddTask(topic, topic, -1, 10); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现