我有一份工作,需要在另一个对象上启动一些方法。我希望能够将这些传递给其构造函数中的工作。
环顾四周,看来实现此目标的唯一方法是使用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/