Ban*_*San 7 .net quartz-scheduler quartz.net
我有一份工作需要在另一个对象上启动一些方法.我希望能够在构造函数中将这些传递给作业.
环顾四周,似乎实现这一目标的唯一方法是使用一个IoC框架.虽然这种方法将来会成为我的解决方案,但现在我需要一个香草解决方案,不需要任何IoC.
我知道JobDataMap但是由于序列化,最佳实践文档建议不要这样做.该对象是多线程和有状态的,因此无论如何序列化将是代码自杀.
如何创建类似于以下的工作:
public class MyJob : IJob
{
private readonly IFoo _foo;
public StopMonitoring(IFoo foo)
{
_foo = foo;
}
public void Execute(IJobExecutionContext context)
{
foo.GetCurrentState();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bac*_*cks 15
你需要使用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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
var _scheduler = schedulerFactory.GetScheduler();
var _scheduler.JobFactory = new IntegrationJobFactory(container);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3675 次 |
| 最近记录: |