Autofac.Extras.Quartz 10.0.0

dotnet add package Autofac.Extras.Quartz --version 10.0.0
                    
NuGet\Install-Package Autofac.Extras.Quartz -Version 10.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Autofac.Extras.Quartz" Version="10.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Autofac.Extras.Quartz" Version="10.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Autofac.Extras.Quartz" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Autofac.Extras.Quartz --version 10.0.0
                    
#r "nuget: Autofac.Extras.Quartz, 10.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Autofac.Extras.Quartz@10.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Autofac.Extras.Quartz&version=10.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Autofac.Extras.Quartz&version=10.0.0
                    
Install as a Cake Tool

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.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (13)

Showing the top 5 NuGet packages that depend on Autofac.Extras.Quartz:

Package Downloads
Lauener.Core.Triggers

A easy to use Quartz implementation

HwApp.Quartz

HwApp Quartz & Quartzmin

SyWaterStandardLibrary

舜禹框架Core 3.0

Cogito.Quartz.Autofac

Provides utilites and extensions for Quartz and Autofac.

Inaction.Web

.net core Web快速开发框架

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Autofac.Extras.Quartz:

Repository Stars
Reaparr/Reaparr
Plex downloader that brings content from any server to yours!
Version Downloads Last Updated
10.0.0 339,448 3/7/2024
10.0.0-alpha0007 155 3/5/2024
10.0.0-alpha0006 174 3/4/2024
9.0.0 232,947 3/27/2023
8.2.0 73,047 1/30/2023
8.2.0-alpha0001 263 1/30/2023
8.1.0 2,624 1/24/2023
8.1.0-alpha0003 286 12/22/2022
8.1.0-alpha0002 257 12/22/2022
8.0.0 152,843 6/3/2022
7.4.0-alpha0007 338 6/2/2022
7.4.0-alpha0005 11,079 5/17/2022
7.4.0-alpha0002 292 5/8/2022
7.3.0 196,351 10/28/2021
7.3.0-alpha0009 379 10/28/2021
7.2.0 51,230 8/2/2021
7.2.0-alpha0006 392 8/1/2021
7.1.0 68,828 4/25/2021
7.1.0-alpha0011 396 8/1/2021
7.1.0-alpha0010 423 8/1/2021
7.1.0-alpha0009 451 8/1/2021
7.1.0-alpha0008 404 6/20/2021
7.1.0-alpha0006 398 4/30/2021
7.1.0-alpha0004 398 4/24/2021
7.1.0-alpha0003 443 4/24/2021
7.1.0-alpha0002 394 4/19/2021
7.1.0-alpha0001 370 4/19/2021
7.0.0 224,676 2/16/2021
7.0.0-beta0001 405 2/14/2021
7.0.0-alpha0024 415 2/14/2021
7.0.0-alpha0023 423 2/9/2021
6.3.0-alpha0001 408 2/9/2021
6.2.0 15,623 1/29/2021
6.2.0-beta0001 407 1/29/2021
6.2.0-alpha0008 429 1/28/2021
6.2.0-alpha0001 534 1/10/2021
6.1.0 18,110 1/10/2021
6.1.0-beta0001 454 1/4/2021
6.0.1 48,292 10/21/2020
6.0.1-beta0001 562 10/21/2020
6.0.0 76,082 10/9/2020
6.0.0-beta0001 524 10/9/2020
6.0.0-alpha0041 545 10/7/2020
6.0.0-alpha0039 570 10/7/2020
5.4.0 45,325 10/7/2020
5.4.0-beta0001 522 10/4/2020
5.4.0-alpha0007 519 10/4/2020
5.4.0-alpha0001 752 8/6/2020
5.3.0 42,063 8/6/2020
5.3.0-beta0001 549 8/6/2020
5.3.0-alpha0009 551 8/6/2020
5.3.0-alpha0008 611 7/27/2020
5.3.0-alpha0007 613 7/8/2020
5.3.0-alpha0001 1,168 5/19/2020
5.2.0 116,432 5/19/2020
5.2.0-beta0001 595 5/19/2020
5.2.0-alpha0023 593 5/19/2020
5.2.0-alpha0021 864 2/17/2020
5.1.0 168,310 2/17/2020
5.1.0-alpha0015 595 2/17/2020
5.1.0-alpha0014 650 2/8/2020
5.1.0-alpha0005 667 1/30/2020
5.0.0 28,637 1/30/2020
5.0.0-beta0001 674 1/30/2020
5.0.0-alpha0064 597 1/30/2020
4.7.0-alpha0013 3,353 1/29/2020
4.7.0-alpha0009 629 1/27/2020
4.7.0-alpha0007 2,155 11/18/2019
4.7.0-alpha0006 621 11/17/2019
4.7.0-alpha0005 658 11/8/2019
4.7.0-alpha0004 1,283 9/2/2019
4.6.0 240,209 9/2/2019
4.6.0-beta0001 677 9/1/2019
4.6.0-alpha0036 659 9/1/2019
4.6.0-alpha0034 648 9/1/2019
4.6.0-alpha0033 639 9/1/2019
4.6.0-alpha0028 714 7/13/2019
4.6.0-alpha0026 676 7/13/2019
4.6.0-alpha0024 655 7/6/2019
4.6.0-alpha0022 654 7/6/2019
4.6.0-alpha0018 665 7/6/2019
4.6.0-alpha0008 817 5/8/2019
4.6.0-alpha0005 680 5/8/2019
4.6.0-alpha0003 712 5/8/2019
4.6.0-alpha0001 845 3/10/2019
4.5.1 179,395 5/8/2019
4.5.1-beta0001 706 5/8/2019
4.5.0 110,523 3/9/2019
4.5.0-beta0001 709 3/9/2019
4.5.0-alpha0008 688 3/9/2019
4.5.0-alpha0007 715 3/8/2019
4.5.0-alpha0005 741 2/25/2019
4.5.0-alpha0003 973 2/11/2019
4.5.0-alpha0002 784 1/28/2019
4.5.0-alpha0001 807 1/27/2019
4.4.0 112,802 1/27/2019
4.4.0-beta0001 832 1/27/2019
4.4.0-alpha0014 1,202 9/29/2018
4.4.0-alpha0013 916 9/29/2018
4.4.0-alpha0012 890 9/29/2018
4.4.0-alpha0002 978 9/23/2018
4.4.0-alpha0001 900 9/19/2018
4.3.0 159,926 9/29/2018
4.3.0-beta0001 945 9/26/2018
4.3.0-alpha0008 1,762 7/11/2018
4.3.0-alpha0007 1,317 7/7/2018
4.3.0-alpha0006 1,317 7/7/2018
4.3.0-alpha0005 1,329 7/1/2018
4.2.0 44,992 7/1/2018
4.2.0-beta0001 1,303 6/30/2018
4.2.0-alpha0004 1,304 7/1/2018
4.2.0-alpha0003 1,730 5/13/2018
4.2.0-alpha0002 1,368 5/13/2018
4.2.0-alpha0001 1,371 5/13/2018
4.1.2 1,670 6/30/2018
4.1.1 63,667 5/13/2018
4.1.0-beta0004 1,361 5/13/2018
4.1.0-beta0001 1,383 5/13/2018
4.1.0-alpha0016 1,687 4/14/2018
4.0.0 70,762 1/14/2018
4.0.0-beta0007 1,478 1/14/2018
4.0.0-beta0006 1,391 1/13/2018
4.0.0-beta0001 1,345 1/13/2018
3.5.0 115,712 4/14/2018
3.5.0-unstable0012 1,484 1/5/2018
3.5.0-unstable0010 1,654 8/15/2017
3.5.0-unstable0004 1,202 8/1/2017
3.5.0-unstable0003 1,220 7/25/2017
3.5.0-unstable0002 1,263 6/21/2017
3.5.0-unstable0001 1,315 6/15/2017
3.5.0-beta0001 1,543 4/14/2018
3.4.0 130,664 5/5/2017
3.4.0-unstable0009 1,265 4/5/2017
3.4.0-unstable0008 1,242 4/5/2017
3.4.0-unstable0007 1,262 4/5/2017
3.4.0-unstable0006 1,206 4/5/2017
3.4.0-unstable0004 1,333 2/15/2017
3.4.0-unstable0001 1,331 12/4/2016
3.4.0-ci0000 1,210 4/5/2017
3.3.0 76,407 11/1/2016
3.3.0-unstable0001 1,342 11/1/2016
3.3.0-unstable0000 1,226 10/10/2016
3.2.0 8,711 10/10/2016
3.2.0-beta0001 1,228 10/10/2016
3.1.0 57,770 8/25/2016
3.1.0-unstable0022 1,225 10/9/2016
3.1.0-unstable0021 1,254 10/9/2016
3.0.0-unstable0020 1,343 7/17/2016
3.0.0-unstable0017 1,309 8/24/2016
3.0.0-unstable0013 1,280 7/17/2016
3.0.0-unstable0012 1,288 7/17/2016
3.0.0-unstable0011 1,274 7/17/2016
3.0.0-beta-1 1,361 7/4/2016
3.0.0-alpha0014 1,219 7/20/2016
2.2.0-unstable0012 1,325 7/19/2016
2.1.1 19,605 7/16/2016
2.1.0 39,120 4/8/2016
2.0.0.1 1,930 4/6/2016
1.7.0 44,757 10/29/2015
1.6.0 3,569 10/25/2015
1.5.1 20,518 7/14/2015
1.5.0 1,638 7/14/2015
1.4.0 5,213 6/12/2015
1.3.0 17,176 2/1/2015
1.2.0 4,050 1/26/2015
1.1.1 6,692 11/15/2014
1.1.0 10,469 7/13/2014
1.0.0 3,047 7/2/2014
0.11.0 2,204 5/18/2014
0.10.0 2,089 4/9/2014
0.9.0 6,049 4/7/2014