繁体   English   中英

Quartz.Net:如何通过上下文发送类的实例

[英]Quartz.Net: how to send instance of class through context

我想将 Logger (NLog) 的对象传递给我的工作。 我有一堂课

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

如何将记录器传递给我的 Job 类的实例? 或者换句话说:如何将记录器置于上下文中? 我找不到任何关于它的信息,即使在 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;

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM