加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – ASP.Net MVC 3,Ninject和Quartz.Net – 如何?

发布时间:2020-12-15 22:59:29 所属栏目:asp.Net 来源:网络整理
导读:我现在正在使用Ninject 2.2.1.4,与我的MVC3,我成功配置Ninject运行它,但我不知道如何使Ninject运行在Quartz.Net在我的MVC3 谁能帮忙? 解决方法 创建一个使用Ninject的JobFactory public class NinjectJobFactory : IJobFactory{ private readonly FuncType,
我现在正在使用Ninject 2.2.1.4,与我的MVC3,我成功配置Ninject运行它,但我不知道如何使Ninject运行在Quartz.Net在我的MVC3
谁能帮忙?

解决方法

创建一个使用Ninject的JobFactory
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);
    }
}

并配置

Bind<IJobFactory>().To<NinjectJobFactory>();
Bind<ISchedulerFactory>().ToProvider<QuartzSchedulerFactoryProvider>();
Bind<IScheduler>().ToProvider<QuartzSchedulerProvider>().InSingletonScope();
Bind<Func<Type,IJob>>().ToMethod(ctx => t => (IJob)ctx.Kernel.Get(t));

如果你需要一些ISchedulerListener,例如用于日志记录也绑定在这里.

注入IScheduler的一个实例,您想要添加作业,最有可能您必须将实例的属性注入到global.asax中.但是请注意,我没有在MVC上下文中使用Quarz,而我认为计划任务不属于Web应用程序,而是属于在同一服务器上运行的服务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读