Autofac.Extras.Quartz 10.0.0-alpha0006

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/milestone/29

.NET 6.0

.NET Standard 2.1

.NET Standard 2.0

.NET 8.0

.NET 7.0

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