2011-07-19 15 views

答えて

20

Ninject

public class NinjectJobFactory : IJobFactory 
{ 
    private readonly Func<Type, IJob> jobFactory; 

    public NinjectJobFactory (Func<Type, IJob> jobFactory) 
    { 
     this.jobFactory = jobFactory; 
    } 

    public IJob NewJob(TriggerFiredBundle bundle) 
    { 
     return this.jobFactory(bundle.JobDetail.JobType); 
    } 
} 

とQuarzSchedulerProvider

public class QuartzSchedulerProvider : Provider<IScheduler> 
{ 
    private readonly IJobFactory jobFactory; 
    private readonly IEnumerable<ISchedulerListener> listeners; 
    private readonly ISchedulerFactory schedulerFactory; 

    public QuartzSchedulerProvider(
     ISchedulerFactory schedulerFactory, 
     IJobFactory jobFactory, 
     IEnumerable<ISchedulerListener> listeners) 
    { 
     this.jobFactory = jobFactory; 
     this.listeners = listeners; 
     this.schedulerFactory = schedulerFactory; 
    } 

    protected override IScheduler CreateInstance(IContext context) 
    { 
     var scheduler = this.schedulerFactory.GetScheduler(); 
     scheduler.JobFactory = this.jobFactory; 
     foreach (var listener in this.listeners) 
     { 
      scheduler.AddSchedulerListener(listener); 
     } 

     return scheduler; 
    } 
} 

とSchedulerFactoryProvider

public class QuartzSchedulerFactoryProvider : Provider<ISchedulerFactory> 
{ 
    protected override ISchedulerFactory CreateInstance(IContext context) 
    { 
     var properties = new NameValueCollection(); 
     properties["quartz.dataSource.DataSource.connectionString"] = "Your connection string"; 
     properties["quartz.dataSource.DataSource.provider"] = "Your provider"; 

     properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; 
     properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz "; 
     properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; 
     properties["quartz.jobStore.dataSource"] = "DataSource"; 
     properties["quartz.jobStore.useProperties"] = "true"; 

     return new StdSchedulerFactory(properties); 
    } 
} 

を設定を使用していますJobFactoryを作成します。 210

ISchedulerListenerが必要な場合などロギングのためにここにもそれらをバインドします。

あなたがジョブを追加すると、あなたものGlobal.asaxにインスタンスのプロパティ注射をしなければならない可能性が高いISchedulerのインスタンスを注入します。しかし、私はMVCコンテキストでQuarzを使用していないことに注意してください。スケジュールされたタスクはWebアプリケーションに属するのではなく、同じサーバー上で動作するサービスに属すると思います。

+0

そんなにレモ:)おかげで、私は –

+0

@Remoそれを試してみましょう:this.kernelであるか、またはあなたがVARの名前を変更するつもりでした上部付近this.ResolutionRoot必要がありますか? (またはIJobFactoryのResolutionRootなのですか?) –

+0

はい、あなたは正しいです。私は私のソリューションからコピーしたときにすべての名前を変更しません。私は通常、IKernelではなくIResolutionRootを使用します。 –

関連する問題