2017-04-19 48 views
1

這是我的代碼,它不工作,因爲顯然,IJobDetails需要與作業生成器一起創建。有什麼辦法用構造函數中給出的外部依賴來創建Job?使用DI與石英

var container = new UnityContainer(); 
container.RegisterType<BbProcessor, BbProcessor>(); 
IJobDetail jobProcessor = container.Resolve<BbProcessor>() as IJobDetail; 

// construct a scheduler factory 
ISchedulerFactory schedFact = new StdSchedulerFactory(); 

// get a scheduler 
IScheduler sched = schedFact.GetScheduler(); 
sched.Start(); 

ITrigger trigger = TriggerBuilder.Create() 
        .StartNow() 
        .WithSimpleSchedule(x => x 
         .WithIntervalInSeconds(10) 
         .RepeatForever()) 
        .Build(); 

sched.ScheduleJob(jobProcessor , trigger); 

演員是壞的,但是這是我想要做的(BbProcessor是給構造器的依賴類,做的工作,我想這樣做)只是例子。

public class BbProcessor : IJob 
{ 
    private readonly Repository _repository; 
    public BbProcessor(Repository Repository) 
    { 
     _repository = Repository; 
    } 
} 
+0

,你能否告訴我們代碼到BbProcessor? –

+0

'public class BbProcessor:IJob { private private readonly Repository _repository;公共BbProcessor(版本庫) { }' –

+0

我想你也需要一個無參數的構造函數。請參閱下面我編輯的答案。 –

回答

1

BbProcessor實現IJob而不是IJobDetail這就是爲什麼演員失敗。你可以使用統一的接口,而不是(see here),但那不是你真正想要的註冊BbProcessor類:

var container = new UnityContainer(); 
container.RegisterType<IJob, BbProcessor>(); 
IJob jobProcessor = container.Resolve<IJob>(); 

事實上,BbProcessor必須有一個無參數的構造函數。 See Documentation. 此外,look here爲一個完整的例子設置你的工作。

您創建一個IJobDetail這樣的:

IJobDetail job = JobBuilder.Create<BbProcessor>().WithIdentity("Job BB","Group BB").Build(); 

JobBuilder不使用你的解析式。看看這個項目中的團結與石英集成可以讓你你以後:https://github.com/hbiarge/Quartz.Unity

+0

看起來像我需要創建這樣的工作:'IJobDetail job = JobBuilder.Create () .WithIdentity(「myJob」,「group1」) .Build();'但仍然使用空的constructr(至少看起來像這樣)我需要解決這個問題 –