Autofac.Extras.Quartz 10.0.0

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 via Nuget: install-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.

https://github.com/alphacloud/Autofac.Extras.Quartz/releases/tag/10.0.0

.NET 6.0

.NET Standard 2.1

.NET Standard 2.0

.NET 8.0

.NET 7.0

Version Downloads Last updated
10.0.0 63 03/08/2024
10.0.0-alpha0007 47 03/08/2024
10.0.0-alpha0006 47 03/08/2024
9.0.0 59 05/23/2023
8.2.0 64 08/08/2023
8.2.0-alpha0001 51 08/15/2023
8.1.0 66 06/02/2023
8.1.0-alpha0003 57 04/26/2023
8.1.0-alpha0002 67 08/16/2023
8.0.0 78 07/28/2022
7.4.0-alpha0007 57 08/16/2023
7.4.0-alpha0005 57 05/26/2023
7.4.0-alpha0002 63 08/05/2023
7.3.0 58 11/11/2022
7.3.0-alpha0009 65 12/02/2022
7.2.0 63 02/21/2023
7.2.0-alpha0006 65 04/12/2023
7.1.0 56 05/31/2023
7.1.0-alpha0011 55 06/08/2023
7.1.0-alpha0010 57 08/15/2023
7.1.0-alpha0009 62 08/07/2023
7.1.0-alpha0008 72 06/06/2023
7.1.0-alpha0006 60 04/12/2023
7.1.0-alpha0004 55 08/16/2023
7.1.0-alpha0003 52 08/03/2023
7.1.0-alpha0002 66 10/10/2022
7.1.0-alpha0001 58 08/11/2023
7.0.0 73 07/06/2023
7.0.0-beta0001 59 05/03/2023
7.0.0-alpha0024 54 08/16/2023
7.0.0-alpha0023 53 10/05/2022
6.3.0-alpha0001 57 11/11/2022
6.2.0 67 06/02/2023
6.2.0-beta0001 46 08/15/2023
6.2.0-alpha0008 51 08/15/2023
6.2.0-alpha0001 56 11/06/2022
6.1.0 76 05/17/2023
6.1.0-beta0001 55 10/19/2022
6.0.1 73 10/28/2022
6.0.1-beta0001 53 08/08/2023
6.0.0 72 05/13/2023
6.0.0-beta0001 56 05/15/2023
6.0.0-alpha0041 51 08/20/2023
6.0.0-alpha0039 56 06/01/2023
5.4.0 59 11/25/2022
5.4.0-beta0001 56 09/24/2022
5.4.0-alpha0007 52 08/09/2023
5.4.0-alpha0001 56 10/14/2023
5.3.0 53 08/06/2023
5.3.0-beta0001 59 08/11/2023
5.3.0-alpha0009 57 06/12/2023
5.3.0-alpha0008 72 05/24/2023
5.3.0-alpha0007 57 05/28/2023
5.3.0-alpha0001 56 05/19/2023
5.2.0 53 08/16/2023
5.2.0-beta0001 65 08/07/2023
5.2.0-alpha0023 55 08/06/2023
5.2.0-alpha0021 56 08/12/2023
5.1.0 84 09/13/2022
5.1.0-alpha0015 61 06/06/2023
5.1.0-alpha0014 60 06/05/2023
5.1.0-alpha0005 48 05/07/2023
5.0.0 67 04/26/2023
5.0.0-beta0001 58 08/21/2023
5.0.0-alpha0064 58 08/22/2023
4.7.0-alpha0013 49 05/29/2023
4.7.0-alpha0009 47 08/11/2023
4.7.0-alpha0007 55 08/14/2023
4.7.0-alpha0006 56 12/06/2022
4.7.0-alpha0005 60 05/04/2023
4.7.0-alpha0004 69 09/28/2022
4.6.0 56 08/25/2022
4.6.0-beta0001 68 08/06/2023
4.6.0-alpha0036 64 08/03/2023
4.6.0-alpha0034 55 05/04/2023
4.6.0-alpha0033 54 08/03/2023
4.6.0-alpha0028 60 09/05/2023
4.6.0-alpha0026 65 09/24/2023
4.6.0-alpha0024 48 08/02/2023
4.6.0-alpha0022 51 07/29/2023
4.6.0-alpha0018 56 08/14/2023
4.6.0-alpha0008 53 06/16/2023
4.6.0-alpha0005 52 08/09/2023
4.6.0-alpha0003 54 06/04/2023
4.6.0-alpha0001 54 07/22/2023
4.5.1 84 05/03/2023
4.5.1-beta0001 50 05/03/2023
4.5.0 81 08/24/2023
4.5.0-beta0001 67 07/29/2023
4.5.0-alpha0008 53 08/24/2023
4.5.0-alpha0007 49 08/15/2023
4.5.0-alpha0005 55 05/19/2023
4.5.0-alpha0003 59 09/10/2022
4.5.0-alpha0002 53 08/16/2023
4.5.0-alpha0001 71 11/12/2022
4.4.0 60 10/12/2022
4.4.0-beta0001 58 09/25/2022
4.4.0-alpha0014 54 08/19/2023
4.4.0-alpha0013 58 11/26/2022
4.4.0-alpha0012 52 08/14/2023
4.4.0-alpha0002 72 07/14/2023
4.4.0-alpha0001 51 08/17/2023
4.3.0 81 10/23/2022
4.3.0-beta0001 57 10/20/2023
4.3.0-alpha0008 57 08/04/2023
4.3.0-alpha0007 53 08/10/2023
4.3.0-alpha0006 67 05/15/2023
4.3.0-alpha0005 52 05/30/2023
4.2.0 60 05/16/2023
4.2.0-beta0001 70 07/09/2023
4.2.0-alpha0004 53 11/10/2022
4.2.0-alpha0003 51 08/10/2023
4.2.0-alpha0002 51 08/18/2023
4.2.0-alpha0001 59 08/17/2023
4.1.2 61 08/21/2023
4.1.1 64 05/21/2023
4.1.0-beta0004 53 07/30/2023
4.1.0-beta0001 60 04/01/2023
4.1.0-alpha0016 49 08/17/2023
4.0.0 57 10/26/2022
4.0.0-beta0007 64 10/27/2022
4.0.0-beta0006 54 05/19/2023
4.0.0-beta0001 70 08/24/2023
3.5.0 75 05/08/2023
3.5.0-unstable0012 53 10/17/2022
3.5.0-unstable0010 62 08/15/2023
3.5.0-unstable0004 58 10/22/2022
3.5.0-unstable0003 76 04/28/2023
3.5.0-unstable0002 66 07/31/2023
3.5.0-unstable0001 68 06/21/2023
3.5.0-beta0001 64 08/21/2023
3.4.0 74 04/15/2023
3.4.0-unstable0009 65 05/25/2023
3.4.0-unstable0008 64 09/23/2023
3.4.0-unstable0007 57 08/06/2023
3.4.0-unstable0006 57 08/16/2023
3.4.0-unstable0004 62 08/08/2023
3.4.0-unstable0001 67 05/02/2023
3.4.0-ci0000 56 05/08/2023
3.3.0 54 08/05/2023
3.3.0-unstable0001 63 05/14/2023
3.3.0-unstable0000 54 08/11/2023
3.2.0 55 08/30/2022
3.2.0-beta0001 58 10/26/2022
3.1.0 61 08/29/2022
3.1.0-unstable0022 53 08/17/2023
3.1.0-unstable0021 51 08/18/2023
3.0.0-unstable0020 71 06/16/2023
3.0.0-unstable0017 63 08/25/2023
3.0.0-unstable0013 50 06/13/2023
3.0.0-unstable0012 55 04/27/2023
3.0.0-unstable0011 51 08/21/2023
3.0.0-beta-1 55 10/23/2022
3.0.0-alpha0014 68 08/22/2023
2.2.0-unstable0012 52 03/03/2023
2.1.1 50 08/12/2023
2.1.0 83 10/16/2022
2.0.0.1 75 11/12/2022
1.7.0 72 06/01/2023
1.6.0 52 08/11/2023
1.5.1 62 05/10/2023
1.5.0 80 08/15/2023
1.4.0 90 10/24/2022
1.3.0 62 08/11/2023
1.2.0 59 08/08/2023
1.1.1 61 08/11/2023
1.1.0 58 08/12/2023
1.0.0 51 05/09/2023
0.11.0 83 06/04/2023
0.10.0 54 06/07/2023
0.9.0 86 07/02/2023