quartz.net C#: как передать внешнюю переменную в задание через JobDataMap
В своем проекте я использую autofac и единицу работы / репозиторий, я тоже использую Quartz.Net.
Теперь я пишу работу, в коде моей работы мне нужен доступ к репозиториям.
я написал класс для использования в Globl.aspx:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Quartz;
using Quartz.Impl;
using ServiceLayer;
namespace Web.Utility.Scheduler
{
public class CheckProgramFinalizeScheduler
{
private static IService _service;
public CheckProgramFinalizeScheduler(IService service)
{
_service = service;
}
public static void Start()
{
IJobDetail job = JobBuilder.Create<CheckProgramFinalizeJob>()
.WithIdentity("checkFitnessplanJob", "fitnessPlan").UsingJobData("service",_service).Build();
ITrigger trigger = TriggerBuilder.Create().WithIdentity("checkFitnessplanTrigger", "fitnessPlan")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 59)).ForJob(job).Build();
}
}
}
Но с использованием предопределенных типов JobData (не принимает IService / который не включает IService) .UsingJobData("service",_service).
как передать экземпляр IService на мою работу?
моя работа:
public class CheckProgramFinalizeJob:IJob
{
public Task Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
IService _service =(IService) dataMap.Get("service");
var allCoachUnFinalized = _service.FitnessPlanRepository.GetAll(null,
new Expression<Func<FitnessPlan, bool>>[]
{fp => fp.CoachFinalize == false && fp.PaymentStatus == PaymentStatusType.Paid}, null).List;
foreach (var fitnessPlan in allCoachUnFinalized)
{
if (fitnessPlan.PayDate.Day - DateTime.Now.Day > 3)
{
var user = _service.UserRepository.Get(null,
new Expression<Func<User, bool>>[] {u => u.Id == fitnessPlan.UserId},u=>u.UserFinancial);
var coach = _service.UserCoachRepository.Get(null,
new Expression<Func<UserCoach, bool>>[] {uc => uc.Id == fitnessPlan.UserCoachId},uc=>uc.CoachSetting);
var amount = fitnessPlan.WithDiet
? fitnessPlan.UserCoach.CoachSetting.DietPrice +
fitnessPlan.UserCoach.CoachSetting.FitnessPlanPrice
: fitnessPlan.UserCoach.CoachSetting.FitnessPlanPrice;
user.UserFinancial.FinancialInventory += (long)amount;
_service.FitnessPlanRepository.Remove(fitnessPlan);
}
}
return Task.CompletedTask;
}
}