Rebus.SimpleInjector 9.0.0-alpha01

This is a prerelease version of Rebus.SimpleInjector.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Rebus.SimpleInjector --version 9.0.0-alpha01                
NuGet\Install-Package Rebus.SimpleInjector -Version 9.0.0-alpha01                
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="Rebus.SimpleInjector" Version="9.0.0-alpha01" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Rebus.SimpleInjector --version 9.0.0-alpha01                
#r "nuget: Rebus.SimpleInjector, 9.0.0-alpha01"                
#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.
// Install Rebus.SimpleInjector as a Cake Addin
#addin nuget:?package=Rebus.SimpleInjector&version=9.0.0-alpha01&prerelease

// Install Rebus.SimpleInjector as a Cake Tool
#tool nuget:?package=Rebus.SimpleInjector&version=9.0.0-alpha01&prerelease                

Rebus.SimpleInjector

install from nuget

Provides a SimpleInjector-based container adapter for Rebus.

alternate text is missing from this package README image


To configure Rebus to work with your SimpleInjector container, simply call

container.RegisterRebus(
    configurer => configurer
        .(...)
);

where the (...) is the part usually omitted from the Rebus configuration examples.

A slightly more realistic example (using Serilog, RabbitMQ and SQL Server) could look like this:

var rabbitMqConnectionString = "amqp://rebususer:blablasecret@BIGRABBIT01.local";
var sqlServerConnectionString = "server=SQLMOTEL01.local; database=RebusStuff; trusted_connection=true";

container.RegisterRebus(
	configurer => configurer
		.Logging(l => l.Serilog())
		.Transport(t => t.UseRabbitMq(rabbitMqConnectionString, "simpleinjectortest"))
		.Sagas(s => s.StoreInSqlServer(sqlServerConnectionString, "Sagas", "SagaIndex"))
);

The examples shown so far will make the necessary container registrations, but the bus will not be started until either

  1. The container resolves the IBus instance, or
  2. You call the container.StartBus() extension method

so you should probably always remember to call container.StartBus() when your application starts (after it has finished making ALL of its container registrations).

If you would like to be able to resolve IBus WITHOUT starting consuming messages, you can set startAutomatically to false when configuring it like so:

container.RegisterRebus(
	configurer => configurer
		.Transport(...),

	startAutomatically: false
);

which will configure the bus to have 0 workers when it's resolved from the container. You must then call

container.StartBus();

to start it.

So why is it different from all the other container adapters?

Because SimpleInjector is very opinionated about its registration API and Rebus is pretty loose about it 😃

How to register handlers?

Since Rebus' container adapters resolve ALL handlers that can handle an incoming message, handlers must be registered with the registration API for collections, e.g. like

container.Collection.Register<IHandleMessages<SomeMessage>>(typeof(SomeMessageHandler));

Due to limitations in SimpleInjector, you must be sure that all handlers for a given message type get registered with a single registration call similar to the one above.

There also exists a couple of extension methods that help you register handlers (up to three per message type) just the right way:

// one message handler
container.RegisterHandlers<SomeMessage, SomeMessageHandler>();

// two handlers of SomeMessage
container.RegisterHandlers<SomeMessage, SomeMessageHandler, AnotherMessageHandler>();

// three handlers of SomeMessage
container.RegisterHandlers<SomeMessage, SomeMessageHandler, AnotherMessageHandler, YetAnotherMessageHandler>();

The advantage of using Rebus' configuration extension is that it's easier to get right, because the extension will register it the right way in the container, and the API uses C# generics constraints to validate that the given handler types do in fact implement IHandleMessages<> closed with the right type.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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 was computed.  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 was computed.  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. 
.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 was computed. 
.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 (1)

Showing the top 1 NuGet packages that depend on Rebus.SimpleInjector:

Package Downloads
RAES.Core

Package Description

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Rebus.SimpleInjector:

Repository Stars
rebus-org/RebusSamples
Small sample projects
Version Downloads Last updated
9.0.0 7,903 11/15/2023
9.0.0-alpha01 138 3/29/2023
8.0.1 7,825 1/11/2023
8.0.0 9,517 2/3/2022
7.0.0 27,720 7/27/2020
6.0.0 6,001 3/15/2020
5.0.0-b02 5,292 4/19/2018
5.0.0-b01 10,035 8/28/2017
4.0.0 35,231 8/15/2017
4.0.0-b05 846 6/22/2017
4.0.0-b04 849 5/31/2017
4.0.0-b03 805 5/18/2017
4.0.0-b01 792 5/1/2017
3.0.0 24,876 1/5/2017
2.0.0 3,430 9/20/2016
2.0.0-b01 805 9/9/2016
0.99.74 1,019 8/29/2016
0.99.73 1,129 8/12/2016
0.99.72 1,048 8/4/2016
0.99.71 1,277 8/3/2016
0.99.70 1,202 7/29/2016
0.99.68 1,080 7/18/2016
0.99.67 1,056 7/1/2016
0.99.66 1,054 6/28/2016
0.99.65 1,060 6/23/2016
0.99.64 1,021 6/22/2016
0.99.63 1,025 6/21/2016
0.99.62 1,295 6/17/2016
0.99.61 1,037 6/17/2016
0.99.60 1,172 6/15/2016
0.99.59 1,038 6/3/2016
0.99.58 1,036 5/24/2016
0.99.57 1,048 5/22/2016
0.99.56 1,061 5/22/2016
0.99.55 1,016 5/16/2016
0.99.54 1,023 5/12/2016
0.99.53 1,032 5/12/2016
0.99.52 1,056 5/11/2016
0.99.51 1,014 5/9/2016
0.99.50 1,147 4/13/2016
0.99.48 1,073 4/6/2016
0.99.47 1,094 3/31/2016
0.99.46 1,070 3/30/2016
0.99.45 1,055 3/29/2016
0.99.44 1,079 3/26/2016
0.99.43 1,053 3/26/2016
0.99.42 1,053 3/22/2016
0.99.41 1,048 3/17/2016
0.99.40 1,065 3/15/2016
0.99.39 1,047 3/14/2016
0.99.38 1,031 3/9/2016
0.99.37 1,033 3/9/2016
0.99.36 1,061 3/3/2016
0.99.35 1,064 2/22/2016
0.99.34 1,066 2/19/2016
0.99.33 1,229 2/12/2016
0.99.32 1,055 2/10/2016
0.99.31 1,069 2/8/2016
0.99.30 1,045 2/5/2016
0.99.29 1,038 2/2/2016
0.99.27 1,062 1/28/2016
0.99.26 1,038 1/27/2016
0.99.25 1,057 1/22/2016
0.99.24 1,092 1/18/2016
0.99.23 1,100 12/18/2015
0.99.22 1,052 12/18/2015
0.99.21 1,050 12/11/2015
0.99.20 1,131 12/10/2015
0.99.19 1,066 12/8/2015
0.99.18 1,124 12/7/2015
0.99.17 1,065 12/7/2015
0.99.16 1,393 11/30/2015
0.99.14 1,149 11/24/2015
0.99.13 1,201 11/23/2015
0.99.12 1,194 11/17/2015
0.99.11 1,113 11/17/2015
0.99.10 1,117 11/11/2015
0.99.9 1,093 11/5/2015
0.99.8 1,091 11/5/2015
0.99.7 1,102 10/29/2015
0.99.5 1,059 10/27/2015
0.99.4 1,045 10/27/2015
0.99.2 1,120 10/12/2015
0.99.1 1,182 10/8/2015
0.99.0 1,213 10/7/2015
0.98.12 1,171 9/17/2015
0.98.11 1,123 9/17/2015
0.98.10 1,098 9/16/2015
0.98.9 1,126 9/14/2015
0.98.8 1,119 9/13/2015
0.98.7 1,089 9/9/2015
0.98.6 1,120 9/7/2015
0.98.5 1,092 9/3/2015
0.98.4 1,136 9/3/2015
0.98.3 1,102 9/1/2015
0.98.2 1,126 8/27/2015
0.98.0 1,086 8/26/2015
0.97.0 1,135 8/25/2015
0.96.0 1,081 8/24/2015
0.95.0 1,095 8/20/2015
0.94.0 1,073 8/19/2015
0.93.0 1,104 8/19/2015
0.92.4 1,097 8/17/2015
0.92.3 1,341 8/13/2015
0.92.2 1,939 8/12/2015
0.92.1 1,798 8/12/2015
0.92.0 1,222 8/11/2015
0.91.0 1,517 8/11/2015
0.90.9 1,591 8/10/2015
0.90.8 1,431 8/9/2015
0.90.7 1,421 8/5/2015
0.90.6 1,375 8/4/2015
0.90.5 1,289 8/4/2015
0.90.4 1,256 8/2/2015
0.90.3 1,261 8/2/2015
0.90.2 1,231 7/31/2015
0.90.1 1,215 7/29/2015
0.90.0 1,199 7/29/2015