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;
        }
    }

0 ответов

Другие вопросы по тегам