Quartz.Net:如何通过上下文发送 class 的实例
Quartz.Net: how to send instance of class through context
我想将 Logger (NLog) 的对象传递给我的作业。
我有一个 class
public partial class SomeClass
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void SomeMethod() {
try
{
_scheduler = StdSchedulerFactory.GetDefaultScheduler();
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
_scheduler.ScheduleJob(job, trigger);
_scheduler.Start();
}
catch (SchedulerException es)
{
Logger.Trace(es);
Logger.Fatal(es);
}
}
}
和工作:
[DisallowConcurrentExecution]
public class Job : IJob
{
private static int i = 0;
/// <inheritdoc />
public Job()
{
}
/// <inheritdoc />
public void Execute(IJobExecutionContext context)
{
var logger = (Logger)context.Get("logger");//How ????
logger.Debug("etc");
}
}
如何将记录器传递到我的作业 class 的实例?
或者换句话说:如何将记录器置于上下文中?
我找不到任何关于它的信息,即使在 Quartz.Net.
的官方网站上也是如此
我找到了解决方案:
在 SomeClass 中:
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("job1", "group1")
.Build();
job.JobDataMap["logger"] = Logger;
作业内幕:
public void Execute(IJobExecutionContext context)
{
var logger = context.JobDetail.JobDataMap["logger"] as ILogger;
}
我想将 Logger (NLog) 的对象传递给我的作业。 我有一个 class
public partial class SomeClass
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void SomeMethod() {
try
{
_scheduler = StdSchedulerFactory.GetDefaultScheduler();
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("job1", "group1")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
_scheduler.ScheduleJob(job, trigger);
_scheduler.Start();
}
catch (SchedulerException es)
{
Logger.Trace(es);
Logger.Fatal(es);
}
}
}
和工作:
[DisallowConcurrentExecution]
public class Job : IJob
{
private static int i = 0;
/// <inheritdoc />
public Job()
{
}
/// <inheritdoc />
public void Execute(IJobExecutionContext context)
{
var logger = (Logger)context.Get("logger");//How ????
logger.Debug("etc");
}
}
如何将记录器传递到我的作业 class 的实例? 或者换句话说:如何将记录器置于上下文中? 我找不到任何关于它的信息,即使在 Quartz.Net.
的官方网站上也是如此我找到了解决方案:
在 SomeClass 中:
IJobDetail job = JobBuilder.Create<Job>()
.WithIdentity("job1", "group1")
.Build();
job.JobDataMap["logger"] = Logger;
作业内幕:
public void Execute(IJobExecutionContext context)
{
var logger = context.JobDetail.JobDataMap["logger"] as ILogger;
}