Autofac.Extras.Quartz 11.1.0-alpha0002

Autofac.Extras.Quartz

Autofac integration package for Quartz.Net.

Autofac.Extras.Quartz creates nested litefime scope for each Quartz Job. Nested scope is disposed after job execution has been completed.

This allows to have single instance per job execution as well as deterministic disposal of resources.

Install package: dotnet add package Autofac.Extras.Quartz

Build status

Stable Pre-release
Build Master branch Development branch
NuGet NuGet NuGet
CodeCov codecov codecov

Usage example

Autofac configuration for Quartz includes two steps:

  1. Scheduler registration
  2. Job registration

Scheduler registration

QuartzAutofacFactoryModule registers custom ISchedulerFactory and default instance of IScheduler in Autofac container. Both factory and schedulere are registered as singletones. Note: Is is important to resolve IScheduler from container, rather than using default one to get jobs resolved by Autofac.

Optionally custom Quartz configuration can be passed using ConfigurationProvider property. Provider is callback which returns settings using NameValueCollection.

Job scope configuration

Starting with version 7 QuartzAutofacFactoryModule provides a way to customize lifetime scope configuration for job. This can be done via JobScopeConfigurator parameter.

cb.Register(_ => new ScopedDependency("global"))
    .AsImplementedInterfaces()
    .SingleInstance();

cb.RegisterModule(new QuartzAutofacFactoryModule {
    JobScopeConfigurator = (builder, jobScopeTag) => {
        // override dependency for job scope
        builder.Register(_ => new ScopedDependency("job-local "+ DateTime.UtcNow.ToLongTimeString()))
            .AsImplementedInterfaces()
            .InstancePerMatchingLifetimeScope(jobScopeTag);

    }
});

See src/Samples/Shared/Bootstrap.cs for details.

Job registration

QuartzAutofacJobsModule scans given assemblies and registers all non-abstract implementors of IJob interface as transient instances.

internal static ContainerBuilder ConfigureContainer(ContainerBuilder cb)
{
	// 1) Register IScheduler
	cb.RegisterModule(new QuartzAutofacFactoryModule()); 
	// 2) Register jobs
	cb.RegisterModule(new QuartzAutofacJobsModule(typeof (CleanupExpiredAnnouncemetsJob).Assembly));
}

Starting Quartz

Make sure to start the scheduler after it was resolved from Autofac. E.g.

var scheduler = _container.Resolve<IScheduler>();
scheduler.Start();

Sample projects

TopShelf-based sample was removed since Topshelf.Quartz is not compatible with Quartz 3 as af now.

No packages depend on Autofac.Extras.Quartz.

.NET 8.0

.NET 9.0

.NET 10.0

.NET Standard 2.0

.NET Standard 2.1

Version Downloads Last updated
11.1.0-alpha0002 49 03/06/2026
11.0.0 44 03/06/2026
10.1.0-alpha0007 41 02/10/2026
10.0.0 42 12/13/2025
10.0.0-alpha0007 52 12/11/2025
10.0.0-alpha0006 48 12/20/2025
9.0.0 35 12/12/2025
8.2.0 36 12/13/2025
8.2.0-alpha0001 38 12/14/2025
8.1.0 35 12/16/2025
8.1.0-alpha0003 35 12/14/2025
8.1.0-alpha0002 39 12/20/2025
8.0.0 38 12/13/2025
7.4.0-alpha0007 35 12/14/2025
7.4.0-alpha0005 36 12/20/2025
7.4.0-alpha0002 40 12/14/2025
7.3.0 39 12/14/2025
7.3.0-alpha0009 43 12/15/2025
7.2.0 38 12/14/2025
7.2.0-alpha0006 42 12/20/2025
7.1.0 36 01/09/2026
7.1.0-alpha0011 39 12/15/2025
7.1.0-alpha0010 46 12/10/2025
7.1.0-alpha0009 34 12/15/2025
7.1.0-alpha0008 43 12/20/2025
7.1.0-alpha0006 34 12/12/2025
7.1.0-alpha0004 41 12/17/2025
7.1.0-alpha0003 42 12/20/2025
7.1.0-alpha0002 38 12/12/2025
7.1.0-alpha0001 37 12/19/2025
7.0.0 34 12/13/2025
7.0.0-beta0001 38 12/15/2025
7.0.0-alpha0024 37 12/13/2025
7.0.0-alpha0023 42 12/14/2025
6.3.0-alpha0001 41 12/14/2025
6.2.0 35 12/12/2025
6.2.0-beta0001 43 12/09/2025
6.2.0-alpha0008 38 12/16/2025
6.2.0-alpha0001 38 12/17/2025
6.1.0 37 12/14/2025
6.1.0-beta0001 44 12/10/2025
6.0.1 43 12/13/2025
6.0.1-beta0001 35 12/10/2025
6.0.0 38 12/15/2025
6.0.0-beta0001 38 12/10/2025
6.0.0-alpha0041 37 12/12/2025
6.0.0-alpha0039 36 12/20/2025
5.4.0 39 12/22/2025
5.4.0-beta0001 45 12/15/2025
5.4.0-alpha0007 34 12/13/2025
5.4.0-alpha0001 33 12/14/2025
5.3.0 41 12/12/2025
5.3.0-beta0001 42 12/13/2025
5.3.0-alpha0009 36 12/20/2025
5.3.0-alpha0008 35 12/20/2025
5.3.0-alpha0007 41 12/11/2025
5.3.0-alpha0001 35 12/15/2025
5.2.0 39 12/13/2025
5.2.0-beta0001 40 12/13/2025
5.2.0-alpha0023 38 12/20/2025
5.2.0-alpha0021 42 12/17/2025
5.1.0 35 12/14/2025
5.1.0-alpha0015 41 12/14/2025
5.1.0-alpha0014 40 12/15/2025
5.1.0-alpha0005 37 12/20/2025
5.0.0 35 12/12/2025
5.0.0-beta0001 43 12/15/2025
5.0.0-alpha0064 42 12/11/2025
4.7.0-alpha0013 42 12/11/2025
4.7.0-alpha0009 36 12/12/2025
4.7.0-alpha0007 39 12/14/2025
4.7.0-alpha0006 38 12/20/2025
4.7.0-alpha0005 39 12/11/2025
4.7.0-alpha0004 47 12/20/2025
4.6.0 44 12/15/2025
4.6.0-beta0001 39 12/11/2025
4.6.0-alpha0036 41 12/15/2025
4.6.0-alpha0034 33 12/14/2025
4.6.0-alpha0033 40 12/14/2025
4.6.0-alpha0028 47 12/14/2025
4.6.0-alpha0026 43 12/12/2025
4.6.0-alpha0024 34 12/13/2025
4.6.0-alpha0022 39 12/14/2025
4.6.0-alpha0018 42 12/15/2025
4.6.0-alpha0008 34 12/20/2025
4.6.0-alpha0005 36 12/20/2025
4.6.0-alpha0003 34 12/20/2025
4.6.0-alpha0001 45 12/15/2025
4.5.1 42 12/13/2025
4.5.1-beta0001 43 12/15/2025
4.5.0 34 12/13/2025
4.5.0-beta0001 37 12/20/2025
4.5.0-alpha0008 32 12/20/2025
4.5.0-alpha0007 34 12/12/2025
4.5.0-alpha0005 37 12/15/2025
4.5.0-alpha0003 40 12/10/2025
4.5.0-alpha0002 33 12/14/2025
4.5.0-alpha0001 34 12/15/2025
4.4.0 34 12/20/2025
4.4.0-beta0001 42 12/15/2025
4.4.0-alpha0014 35 12/20/2025
4.4.0-alpha0013 28 12/14/2025
4.4.0-alpha0012 35 12/20/2025
4.4.0-alpha0002 31 12/20/2025
4.4.0-alpha0001 42 12/15/2025
4.3.0 37 12/23/2025
4.3.0-beta0001 41 12/15/2025
4.3.0-alpha0008 43 12/15/2025
4.3.0-alpha0007 39 12/15/2025
4.3.0-alpha0006 38 12/12/2025
4.3.0-alpha0005 39 12/13/2025
4.2.0 36 12/22/2025
4.2.0-beta0001 29 12/13/2025
4.2.0-alpha0004 36 12/13/2025
4.2.0-alpha0003 39 12/14/2025
4.2.0-alpha0002 37 12/15/2025
4.2.0-alpha0001 37 12/15/2025
4.1.2 43 12/13/2025
4.1.1 39 12/12/2025
4.1.0-beta0004 41 12/15/2025
4.1.0-beta0001 42 12/13/2025
4.1.0-alpha0016 40 12/10/2025
4.0.0 42 12/10/2025
4.0.0-beta0007 37 12/13/2025
4.0.0-beta0006 36 12/11/2025
4.0.0-beta0001 28 12/15/2025
3.5.0 34 12/13/2025
3.5.0-unstable0012 36 12/15/2025
3.5.0-unstable0010 37 12/15/2025
3.5.0-unstable0004 38 12/20/2025
3.5.0-unstable0003 35 12/20/2025
3.5.0-unstable0002 35 12/20/2025
3.5.0-unstable0001 39 12/14/2025
3.5.0-beta0001 34 12/15/2025
3.4.0 37 12/24/2025
3.4.0-unstable0009 40 12/15/2025
3.4.0-unstable0008 32 12/15/2025
3.4.0-unstable0007 36 12/15/2025
3.4.0-unstable0006 38 12/20/2025
3.4.0-unstable0004 40 12/18/2025
3.4.0-unstable0001 40 12/14/2025
3.4.0-ci0000 31 12/20/2025
3.3.0 37 12/12/2025
3.3.0-unstable0001 33 12/20/2025
3.3.0-unstable0000 37 12/15/2025
3.2.0 38 12/13/2025
3.2.0-beta0001 38 12/15/2025
3.1.0 36 12/14/2025
3.1.0-unstable0022 39 12/15/2025
3.1.0-unstable0021 34 12/20/2025
3.0.0-unstable0020 37 12/15/2025
3.0.0-unstable0017 39 12/20/2025
3.0.0-unstable0013 40 12/20/2025
3.0.0-unstable0012 33 12/13/2025
3.0.0-unstable0011 41 12/09/2025
3.0.0-beta-1 32 12/20/2025
3.0.0-alpha0014 47 12/20/2025
2.2.0-unstable0012 39 12/20/2025
2.1.1 35 12/20/2025
2.1.0 40 12/10/2025
2.0.0.1 37 12/15/2025
1.7.0 36 12/11/2025
1.6.0 43 12/11/2025
1.5.1 38 12/10/2025
1.5.0 50 12/11/2025
1.4.0 38 12/13/2025
1.3.0 44 12/11/2025
1.2.0 35 12/11/2025
1.1.1 38 12/12/2025
1.1.0 40 12/11/2025
1.0.0 44 12/12/2025
0.11.0 33 12/12/2025
0.10.0 41 12/11/2025
0.9.0 42 12/12/2025