gpt4 book ai didi

c# .NET MVC 4 - 如何创建使用 Ninject 服务的 Quartz 作业?

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:00 24 4
gpt4 key购买 nike

我正在使用 .NET MVC 4。所有服务都是使用 Ninject 注入(inject)的。我正在尝试使用 Quartz 安排工作。现在,工作已在 Global.asax 中注册如下:

Global.asax :

protected void Application_Start() {
// ... configuration stuff

ScheduledJobs.RegisterJobs();
}

ScheduleJobs.csScheduledJobs类,它创建带有触发器的作业并将它们添加到标准计划中。

ScheduleJobs.cs :

public class ScheduledJobs {

public static void RegisterJobs() {
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

scheduler.Start();

IJobDetail job = JobBuilder.Create<JobUsingService>()
.WithIdentity("JobUsingService")
.Build();

ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(s =>
s.WithIntervalInHours(1)
.OnEveryDay()
.StartingDailyAt(new Quartz.TimeOfDay(DateTime.Now.Hour, DateTime.Now.Minute)))
.Build();

scheduler.ScheduleJob(job, trigger);
}
}

这是工作代码:

public class JobUsingService : IJobUsingService, IJob {

private ISomeService someService;

public JobUsingService(ISomeService _someService) {
someService = _someService;
}

public void Execute(IJobExecutionContext context) {
someService.someStuff();
}
}

问题是 JobUsingService必须使用 Ninject 进行初始化,以便 SomeService被注入(inject)其中(也是通过 Ninject)。打电话IJobDetail job = JobBuilder.Create<JobUsingService>().WithIdentity("JobUsingService").Build();跳过 Ninject 注入(inject)并创建类的常规实例而不注入(inject)必要的服务。

如何创建 JobUsingService 类型的工作?使用 Ninject?

This SO answer建议创建一个 NinjectJobFactory , 但我不确定如何实际使用这个工厂并创造就业机会。

最佳答案

是的,您必须使用 referenced answerNinjectJobFactory .在应用程序初始化例程(Application_Start 或您配置应用程序以使用 ninject 的任何地方。在创建内核之后)您必须执行以下操作:

Quartz.IScheduler.JobFactory = kernel.Get<NinjectJobFactory>();

或者:

Quartz.IScheduler.JobFactory = new NinjectJobFactory(kernel);

(无所谓,它们完全可以互换)

从那时起,Quarty 将使用 NinjectJobFactory 创建作业类型(JobUsingService,后者又使用 kernel 来创建作业。 .

关于c# .NET MVC 4 - 如何创建使用 Ninject 服务的 Quartz 作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com