.net core 在扩展中使用接口实例之IServiceProvider

在.net core 2.0中,我们使用的对象实例大多数都是通过构造函数依赖注入进来的,但那是在一般的类中使用。

如果需要在静态/扩展类中使用某些服务类的对象实例,可以使用如下方式:

1、新建一个ServiceLocator,包含一个IServiceProvider的静态对象实例,如下:

 public class ServiceLocator
    {
        public static IServiceProvider Services { get; private set; }

        public static void SetServices(IServiceProvider services)
        {
            Services =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个流行的开源任务调度框架,可以帮助我们在.NET Core Web Api进行任务调度。下面是配置Quartz的步骤: 1. 安装Quartz NuGet包:在Visual Studio打开NuGet包管理器控制台,运行以下命令安装Quartz NuGet包: ``` Install-Package Quartz ``` 2. 创建Job类:创建一个继承自IJob接口的Job类,实现Execute方法。在这个方法,你可以编写你的任务逻辑。 ``` public class MyJob : IJob { public async Task Execute(IJobExecutionContext context) { // 编写任务逻辑 } } ``` 3. 配置Scheduler:在Startup.cs文件,添加以下代码来配置Scheduler: ``` services.AddSingleton<IJobFactory, QuartzJobFactory>(); services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>(); services.AddSingleton(new JobSchedule( jobType: typeof(MyJob), cronExpression: "0 0/5 * * * ?")); // 每5分钟执行一次任务 services.AddHostedService<QuartzHostedService>(); ``` 4. 创建JobSchedule类:创建一个JobSchedule类,用于存储Job的类型和Cron表达式。 ``` public class JobSchedule { public JobSchedule(Type jobType, string cronExpression) { JobType = jobType; CronExpression = cronExpression; } public Type JobType { get; } public string CronExpression { get; } } ``` 5. 创建QuartzJobFactory类:创建一个实现IJobFactory接口的QuartzJobFactory类,用于创建Job实例。 ``` public class QuartzJobFactory : IJobFactory { private readonly IServiceProvider _serviceProvider; public QuartzJobFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) { return (IJob)_serviceProvider.GetService(bundle.JobDetail.JobType); } public void ReturnJob(IJob job) { // do nothing } } ``` 6. 创建QuartzHostedService类:创建一个QuartzHostedService类,实现IHostedService接口,并在StartAsync方法启动Scheduler。 ``` public class QuartzHostedService : IHostedService { private readonly ISchedulerFactory _schedulerFactory; private readonly IJobFactory _jobFactory; private readonly IEnumerable<JobSchedule> _jobSchedules; public QuartzHostedService( ISchedulerFactory schedulerFactory, IJobFactory jobFactory, IEnumerable<JobSchedule> jobSchedules) { _schedulerFactory = schedulerFactory; _jobFactory = jobFactory; _jobSchedules = jobSchedules; } public IScheduler Scheduler { get; set; } public async Task StartAsync(CancellationToken cancellationToken) { Scheduler = await _schedulerFactory.GetScheduler(cancellationToken); Scheduler.JobFactory = _jobFactory; foreach (var jobSchedule in _jobSchedules) { var job = JobBuilder.Create(jobSchedule.JobType) .WithIdentity(jobSchedule.JobType.FullName) .Build(); var trigger = TriggerBuilder.Create() .WithIdentity($"{jobSchedule.JobType.FullName}.trigger") .WithCronSchedule(jobSchedule.CronExpression) .Build(); await Scheduler.ScheduleJob(job, trigger, cancellationToken); } await Scheduler.Start(cancellationToken); } public async Task StopAsync(CancellationToken cancellationToken) { await Scheduler?.Shutdown(cancellationToken); } } ``` 现在,你已经成功地配置了Quartz,可以在MyJob类编写你的任务逻辑了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值