Closed sergeyshaykhullin closed 3 years ago
Thanks for reporting and providing the fix. I'll push 3.2.2 soon out.
3.2.1 and 3.2.2 break Autofac.Extras.Quartz/4.6.0. Resolving seems to not work anymore.
Quartz.JobPersistenceException: The job (DEFAULT.XXX) referenced by the trigger does not exist.
bei Quartz.Simpl.RAMJobStore.StoreTriggerInternal(IOperableTrigger newTrigger, Boolean replaceExisting)
bei Quartz.Simpl.RAMJobStore.StoreTrigger(IOperableTrigger newTrigger, Boolean replaceExisting, CancellationToken cancellationToken)
bei Quartz.Core.QuartzScheduler.<ScheduleJob>d__83.MoveNext()
<?xml version="1.0" encoding="utf-8"?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">
<schedule>
<job>
<name>XXX</name>
<group>DEFAULT</group>
<job-type>XXX, ASSEMBLY</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
</schedule>
</job-scheduling-data>
Describe the bug
In 3.2.0 you have
MicrosoftDependencyInjectionScopedJobFactory
it creates scope first and resolve dependency from scope In 3.2.1 you trying to resolve scoped service from root providerNow it works like you try to inject scoped service into Startup.Configure without creating scope
Version used
3.2.1
To Reproduce
Add any scoped job to DI and try to fire it
Expected behavior
If CreateScope is true - create scope first
Additional context
An error occurred instantiating job to be executed. job= 'Template.RequestSendingJob, message=Cannot resolve scoped service 'AppAny.Template.Service.RequestSendingJob' from root provider.' Quartz.SchedulerException: Problem instantiating type 'AppAny.Template.Service.RequestSendingJob: Cannot resolve scoped serv ice 'AppAny.Template.Service.RequestSendingJob' from root provider.' ---> System.InvalidOperationException: Cannot resolve scoped service 'AppAny.Template.Service.RequestSendingJob' from root provider. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, IService Scope scope, IServiceScope rootScope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.Microsoft.Extensions.DependencyInjection.ServiceLookup.IServi ceProviderEngineCallback.OnResolve(Type serviceType, IServiceScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProvi derEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider , Type serviceType) at Quartz.Simpl.MicrosoftDependencyInjectionJobFactory.InstantiateJob(TriggerFiredBundle bundle, IScheduler scheduler) at Quartz.Simpl.PropertySettingJobFactory.NewJob(TriggerFiredBundle bundle, IScheduler scheduler) at MassTransit.QuartzIntegration.MassTransitJobFactory.NewJob(TriggerFiredBundle bundle, IScheduler scheduler) at Quartz.Core.JobRunShell.Initialize(QuartzScheduler sched, CancellationToken cancellationToken) --- End of inner exception stack trace --- [See nested exception: System.InvalidOperationException: Cannot resolve scoped service 'AppAny.Template.Service.RequestSendingJob' from root provider. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, IService Scope scope, IServiceScope rootScope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.Microsoft.Extensions.DependencyInjection.ServiceLookup.IServi ceProviderEngineCallback.OnResolve(Type serviceType, IServiceScope scope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProvi derEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider , Type serviceType) at Quartz.Simpl.MicrosoftDependencyInjectionJobFactory.InstantiateJob(TriggerFiredBundle bundle, IScheduler scheduler) at Quartz.Simpl.PropertySettingJobFactory.NewJob(TriggerFiredBundle bundle, IScheduler scheduler) at MassTransit.QuartzIntegration.MassTransitJobFactory.NewJob(TriggerFiredBundle bundle, IScheduler scheduler) at Quartz.Core.JobRunShell.Initialize(QuartzScheduler sched, CancellationToken cancellationToken)]