13
私は今、私のMVC3で、Ninject 2.2.1.4を使用しています、私はNinjectがそれを実行する設定への成功だけど、私はNinjectが私MVC3 にQuartz.Netで実行させる方法がわからない、誰が助けることはできますか?ASP.Net MVC 3、NinjectとQuartz.Net - どのように?
私は今、私のMVC3で、Ninject 2.2.1.4を使用しています、私はNinjectがそれを実行する設定への成功だけど、私はNinjectが私MVC3 にQuartz.Netで実行させる方法がわからない、誰が助けることはできますか?ASP.Net MVC 3、NinjectとQuartz.Net - どのように?
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を作成します。 210ISchedulerListenerが必要な場合などロギングのためにここにもそれらをバインドします。
あなたがジョブを追加すると、あなたものGlobal.asaxにインスタンスのプロパティ注射をしなければならない可能性が高いISchedulerのインスタンスを注入します。しかし、私はMVCコンテキストでQuarzを使用していないことに注意してください。スケジュールされたタスクはWebアプリケーションに属するのではなく、同じサーバー上で動作するサービスに属すると思います。
そんなにレモ:)おかげで、私は –
@Remoそれを試してみましょう:this.kernelであるか、またはあなたがVARの名前を変更するつもりでした上部付近this.ResolutionRoot必要がありますか? (またはIJobFactoryのResolutionRootなのですか?) –
はい、あなたは正しいです。私は私のソリューションからコピーしたときにすべての名前を変更しません。私は通常、IKernelではなくIResolutionRootを使用します。 –