.net - 使用几个构造函数参数创建一个Quartz.NET Job

标签 .net quartz-scheduler quartz.net

我有一份工作,需要在另一个对象上启动一些方法。我希望能够将这些传递给其构造函数中的工作。

环顾四周,看来实现此目标的唯一方法是使用IoC框架之一。尽管此方法将来会成为我的解决方案,但现在我需要一种通用的解决方案,而不需要任何IoC。

我知道JobDataMap,但是Best Practices文档建议您不要进行序列化。该对象是多线程且有状态的,因此无论如何串行化都会使代码自杀。

如何创建类似于以下内容的工作:

public class MyJob : IJob
{
    private readonly IFoo _foo;

        public StopMonitoring(IFoo foo)
        {
            _foo = foo;
        }

        public void Execute(IJobExecutionContext context)
        {
            foo.GetCurrentState();
        }
    }
}

最佳答案

您需要使用JobFactory:

internal sealed class IntegrationJobFactory : IJobFactory
{
    private readonly IUnityContainer _container;

    public IntegrationJobFactory(IUnityContainer container)
    {
        _container = container;
    }

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        var jobDetail = bundle.JobDetail;

        var job = (IJob)_container.Resolve(jobDetail.JobType);
        return job;
    }

    public void ReturnJob(IJob job)
    {
    }
}

并使用它:
var _scheduler = schedulerFactory.GetScheduler();
var _scheduler.JobFactory = new IntegrationJobFactory(container);

关于.net - 使用几个构造函数参数创建一个Quartz.NET Job,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31861146/

相关文章:

c# - 使用 LINQ 查询/子查询多个方法(Quartz.NET 组、作业和触发器的示例)

.net - 如何解决 google.apis.core 的问题无法安装 Google.Apis.Core 1.8.2 安装此包目标 'WindowsPhoneApp,Version=v8.1',

java - quartz 调度程序是否在自己的线程上运行?

.net - WinForms - 如何在不传递委托(delegate)的情况下从单独的线程访问/调用 UI 线程中的方法?

java - 如何在 Spring MVC 中设置 quartz 触发器的优先级

java - 为什么 Quartz 调度程序的 unscheduleJob 会同时删除触发器和作业详细信息?

c# - 使用 Quartz.NET 处理链式作业的失败

c# - 从双映射

c# - 类型不是预期的,并且无法使用 protobuf-net 的 .NET 预定义类推断出任何契约

c# - SeDebugPrivilege() api 函数是否与 System.Diagnostics.Process.EnterDebugMode 相同?