내 프로젝트에서 Quartz를 사용해야하지만 내가 뭘 잘못했는지 모른다.Quartz.Net Dependency Injection .Net Core
JobFactory :
public class IoCJobFactory : IJobFactory
{
private readonly IServiceProvider _factory;
public IoCJobFactory(IServiceProvider factory)
{
_factory = factory;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return _factory.GetService(bundle.JobDetail.JobType) as IJob;
}
public void ReturnJob(IJob job)
{
var disposable = job as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
QuartzExtensions :
public static class QuartzExtensions
{
public static void UseQuartz(this IApplicationBuilder app)
{
app.ApplicationServices.GetService<IScheduler>();
}
public static async void AddQuartz(this IServiceCollection services)
{
var props = new NameValueCollection
{
{"quartz.serializer.type", "json"}
};
var factory = new StdSchedulerFactory(props);
var scheduler = await factory.GetScheduler();
var jobFactory = new IoCJobFactory(services.BuildServiceProvider());
scheduler.JobFactory = jobFactory;
await scheduler.Start();
services.AddSingleton(scheduler);
}
}
그리고 내 작업을 실행하려고하면 렸기 때문에 난 항상 예외가 (클래스 의존성 주입이) :
_factory.GetService(bundle.JobDetail.JobType) as IJob;
입니다 항상 null입니다.
내 클래스는 IJob
를 구현하고 startup.cs에 내가 추가 :
services.AddScoped<IJob, HelloJob>();
services.AddQuartz();
내가 표준 .NET 핵심 의존성 주입 사용
app.UseQuartz();
:
using Microsoft.Extensions.DependencyInjection;
DI에 직업을 설치하셨습니까? – Rabban
예를 들어'services.AddScoped(); ' –
donex93