Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在quartz.net调度程序中使用依赖项注入_C#_Asp.net_Quartz Scheduler_Quartz.net - Fatal编程技术网

C# 如何在quartz.net调度程序中使用依赖项注入

C# 如何在quartz.net调度程序中使用依赖项注入,c#,asp.net,quartz-scheduler,quartz.net,C#,Asp.net,Quartz Scheduler,Quartz.net,我正在尝试在asp.NETMVC4应用程序中运行quartz.net服务,我们正在使用依赖项注入和服务。在这个应用程序中,我需要石英发送电子邮件与每日周期。但奇怪的是,我不能在quartz.net代码中使用DI,因为如果我向它添加构造函数,它就会损坏。有人知道我如何解决那个问题吗 namespace BBWT.Web.Scheduler { public class EmailJob : IJob { //private readonly IEmailSender ema

我正在尝试在asp.NETMVC4应用程序中运行quartz.net服务,我们正在使用依赖项注入和服务。在这个应用程序中,我需要石英发送电子邮件与每日周期。但奇怪的是,我不能在quartz.net代码中使用DI,因为如果我向它添加构造函数,它就会损坏。有人知道我如何解决那个问题吗

namespace BBWT.Web.Scheduler {
    public class EmailJob : IJob {
        //private readonly IEmailSender emailSender;

        //public EmailJob(IEmailSender emailSender) {
        //    this.emailSender = emailSender;
        //}

        public void Execute(IJobExecutionContext context) {
            var result = new List<DebtorsDTO>()
            {
                new DebtorsDTO()
                {
                    InvoiceId = 1,
                    ClientName = "Some Client",
                    ClientEmail = "someemail@mail.com",
                    ClientId = 1,
                    //SessionId = 1,
                    Date = "17.07.2015",
                    TutorName = "Tutor Tutor",
                    InvoiceName = "Invoice Name 1",
                    AgedAnalysis = "some analysis",
                    SevedDaysOverdue = 1000,
                    FourteenDaysOverdue = 0,
                    TwentyOneDaysOverdue = 0,
                    MoreThatTwentyEightDaysOverdue = 0,
                    Status = "Sent 7 day reminder",
                    IsSelectForEmail = false,
                    OnChase = true,
                    OnHold = false
                }
            };

            //string[] lines = { "First line", "Second line", "Third line" };
            //System.IO.File.WriteAllLines(@"D:\Test\Test.txt", lines);

        }
    }

    public class JobScheduler {
        public static void Start() {
            // Get an instance of the Quartz.Net scheduler
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();

            // Start the scheduler if its in standby
            if(!scheduler.IsStarted)
                scheduler.Start();

            // Define the Job to be scheduled
            var job = JobBuilder.Create<EmailJob>()
                .WithIdentity("JobMonthSchedulerSeventhDay", "IT")
                .RequestRecovery()
                .Build();

            // Associate a trigger with the Job
            var trigger = (ICronTrigger)TriggerBuilder.Create()
                .WithIdentity("TriggerMonthSchedulerSeventhDay", "IT")
                //.WithCronSchedule("0 0 12 7 1/1 ? *") // visit http://www.cronmaker.com/ Queues the job every minute
                .WithCronSchedule("0 0/1 * 1/1 * ? *")
                .StartAt(DateTime.UtcNow)
                .WithPriority(1)
                .Build();

            // Validate that the job doesn't already exists
            if(scheduler.CheckExists(new JobKey("JobMonthSchedulerSeventhDay", "IT"))) {
                scheduler.DeleteJob(new JobKey("JobMonthSchedulerSeventhDay", "IT"));
            }

            var schedule = scheduler.ScheduleJob(job, trigger);
        }
    }

    public class EmailSenderFormDTO {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string EmailTo { get; set; }
    }
}
命名空间BBWT.Web.Scheduler{
公共类电子邮件作业:IJob{
//私人只读邮件发送者;
//公共电子邮件作业(IEmailSender电子邮件发件人){
//this.emailSender=emailSender;
//}
public void Execute(IJobExecutionContext上下文){
var result=新列表()
{
新债务人
{
发票ID=1,
ClientName=“某个客户端”,
客户邮件=”someemail@mail.com",
ClientId=1,
//SessionId=1,
日期=“17.07.2015”,
TutorName=“Tutor Tutor”,
发票名称=“发票名称1”,
AgedAnalysis=“一些分析”,
SevedDaysOverdue=1000,
过期十四天=0,
TwentyOneDaysOverdue=0,
超过28天的天数=0,
Status=“已发送7天提醒”,
IsSelectForEmail=false,
OnChase=true,
OnHold=false
}
};
//字符串[]行={“第一行”、“第二行”、“第三行”};
//System.IO.File.writeAllines(@“D:\Test\Test.txt”,行);
}
}
公共类作业调度器{
公共静态void Start(){
//获取Quartz.Net调度程序的实例
isScheduler scheduler=StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
//如果调度程序处于待机状态,则启动它
如果(!scheduler.IsStarted)
scheduler.Start();
//定义要计划的作业
var job=JobBuilder.Create()
.带有标识(“作业月计划第七天”,“IT”)
.RequestRecovery()
.Build();
//将触发器与作业关联
var trigger=(icontrigger)TriggerBuilder.Create()
.带有标识(“TriggerMonthSchedulerSeventhDay”,“IT”)
//.WithCronSchedule(“0 0 12 7 1/1*”)//访问http://www.cronmaker.com/ 每分钟对作业排队
.WithCronSchedule(“0 0/1*1/1*?*”)
.StartAt(DateTime.UtcNow)
.优先权(1)
.Build();
//验证作业是否不存在
if(scheduler.CheckExists(new JobKey(“JobMonthSchedulerSeventhDay”,“IT”)){
scheduler.DeleteJob(新的JobKey(“JobMonthSchedulerSeventhDay”,“IT”));
}
var schedule=scheduler.ScheduleJob(作业,触发器);
}
}
公共类EmailSendPerformedTo{
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共字符串EmailTo{get;set;}
}
}

我在GitHub上写了一篇简短的博客文章,并附上了YouTube视频和源代码,展示了如何实现这一点。它将逐步介绍如何为作业添加依赖项注入,并解释其工作原理。该示例使用Ninject作为IoC库,但我将其转换为其他代码(例如Autofac)的代码结构应该非常简单


带有视频和源代码的博客帖子:

可能会提供一些见解我也写了一篇关于quartz的文章,但使用Autofac:-评论中有很多好信息,所以也请阅读。谢谢大家,我会看一看。quartz.net让我抓狂这里博客和GitHub源代码都被删除了。这就是为什么您应该始终将代码复制到SO,使您的答案完整且独立。链接应该用作参考或传统资源,而不是答案本身:)谢谢,但还是不行,所以如果博客再次移动,链接将再次失败