【发布时间】:2019-06-23 23:52:40
【问题描述】:
我有一个有效的JobFactory : IJobFactory。我可以很好地创建预定的作业,并毫无问题地注入简单的依赖项,但我确实遇到了一个问题。其中一个依赖项本身依赖于HttpClient,但这似乎不起作用。
例如
services.AddHttpClient<Dependency>("dependency");
services.AddSingleton(typeof(Dependency));
using (var serviceProvider = services.BuildServiceProvider())
{
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
scheduler.JobFactory = new JobFactory(serviceProvider);
await scheduler.Start();
var job = JobBuilder.Create<Job1>()
.WithIdentity("job1")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("trigger1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever())
.Build();
await scheduler.ScheduleJob(job, trigger);
}
依赖构造函数存在
public Dependency(HttpClient httpClient)
{
// <snipped>
}
和作业构造函数是
public Job1(Dependency dependency)
{
// <snipped>
}
当我尝试运行它时,我被告知该作业正在引发未处理的异常。通过我的 JobFactory 进行调试告诉我 httpClient 根本没有被注入。 .AddHttpClient 不应该处理这个吗?是否因为 DI 的多个级别而不起作用?有没有办法换一种方式?
注意,我也尝试像 Dependency 一样手动注册 Job1,但这并没有解决问题。
【问题讨论】:
-
为什么要添加单例?
-
@Nkosi,我添加了单例,以便在安排
Job1时将其注入Job1的构造函数中。 -
这是用于 Web 还是控制台应用程序?
-
控制台应用程序,但它只是独立运行,在不同服务之间传递信息。几乎没有 UI。
-
好的,那么我将不得不稍微改变我的答案,因为我认为这是托管在 Web 服务中的。
标签: c# dependency-injection .net-core quartz.net