2010-08-17 5 views
0

Эта ссылка предлагает создать абстрактный базовый класс, который может считывать информацию о карте данных задания для Quartz.net, и каждая из заданий будет получена из этого базового класса.quartz.net аннотация базовый класс

http://quartznet.sourceforge.net/faq.html#howtochainjobs

Может кто-то предоставить мне образец этого базового класса, потому что я не знаю, как получить сведения о задании базового класса, а затем вызвать метод Execute на производном классе?

Pratik

ответ

0

Создание абстрактный базовый класс просто предложение, сделанное в документации Quartz.NET, и не является обязательным требованием для выполнения задания цепочки. В основном они предполагают, что если вы хотите работу цепи: «AJob» -> «BJob» -> «CJob», вы могли бы сделать что-то вдоль линий этого:

  1. Создать абстрактный класс «ChainBaseJob».

  2. Сделайте свой класс работы (который AJob и BJob являются типами) наследуются от ChainBaseJob.

  3. ChainBaseJob будет содержать какой-то метод, как:

    string GetNextJobInChain() 
    

... которая возвращает имя задания (что означает имя задания Quartz). Существует множество способов использовать это, но я полагаю, что документация предполагает, что ваш TriggerListener проверяет, будет ли (в течение заданного метода работы), если заполненное задание (скажем, «AJob») наследуется от ChainBaseJob. Если это произойдет, он будет использовать его и вызвать GetNextJobInChain и использовать имя, возвращаемое этим методом, чтобы вызвать планировщик для его выполнения после завершения AJob. Если все будет выполнено правильно, TriggerListener будет знать, как выполнить BJob после завершения AJob.

Удачи.

+0

Большое спасибо за объяснение. Если я сделаю этот базовый класс абстрактным, как я могу прочитать карту данных задания для задания в базовом классе. Дело в том, что каждая моя работа в значительной степени имеет те же детали работы, что и адрес электронной почты, идентификатор пользователя, поэтому я хотел бы прочитать эти значения в свойствах базового класса, поэтому мне не нужно повторять этот код в каждом производном классе. Если бы я сделал базовый класс не абстрактным, тогда я могу вызвать конструктор базового класса из конструктора производного класса и прочитать свойства. Я хотел бы узнать, что если базовый класс является абстрактным, то как я могу это достичь. –

+0

Вот как я это сделал. общественный абстрактный класс QuartzJobBase: IJob { public int A {get; задавать; } public void Execute (JobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; A = dataMap.GetInt ("a"); ExecuteInternal (контекст); } общественной абстрактные недействительный ExecuteInternal (JobExecutionContext контекст);}} В производном классе для каждого задания, переопределить метод ExecuteInternal. –

Смежные вопросы