-
Notifications
You must be signed in to change notification settings - Fork 84
Configuring Nimbus With Autofac
We've gone through this blow by blow in the first section so if none of this makes sense go back and have a read there, let's just talk about the Autofac bits.
First thing you need to do is pull down the Autofac provider. This is via NuGet of course.
Install-Package Nimbus.Autofac
Now we configure Nimbus and register it with the container
// This is how you tell Nimbus where to find all your message types and handlers.
var handlerTypesProvider = new AssemblyScanningTypeProvider(Assembly.GetExecutingAssembly());
builder.RegisterNimbus(handlerTypesProvider);
builder.Register(componentContext => new BusBuilder()
.Configure()
.WithTransport(new InProcessTransportConfiguration())
.WithNames("MyApp", Environment.MachineName)
.WithTypesFrom(handlerTypesProvider)
.WithAutofacDefaults(componentContext)
.Build())
.As<IBus>()
.AutoActivate()
.OnActivated(c => c.Instance.Start())
.SingleInstance();
var container = builder.Build();
builder.RegisterNimbus(handlerTypesProvider);
There's an extension method that will register all of the various message handlers with the container. We call it with our handler type provider.
builder.Register(componentContext => new BusBuilder()
.Configure()
.WithConnectionString(connectionString)
.WithNames("MyApp", Environment.MachineName)
.WithTypesFrom(handlerTypesProvider)
.WithAutofacDefaults(componentContext)
.Build())
This is the configuration call we've already seen with one difference. We've already registered our handlers with Autofac but we need to tell the container how to build the configure the bus. You can dig into the source if you want to see how it works, but the .WithAutofacDefaults call is what you'll need.
If you've used Autofac before you'll know you want to register the bus as an IBus so you can use it as a dependency in the rest of your code. We've registered it as SingleInstance of course because we only want one instance of the bus in our app.
Once the Bus is registered we want to start it. To do that we call .AutoActivate() in Autofac to instantiate Nimbus and use the OnActivated delegate to start the bus. This means that when your container is built, Nimbus will be started.
Azure Service Bus
Windows Service Bus
Redis
In Process
Configuring Nimbus With Autofac
Configuring Nimbus With Windsor
Configuring Nimbus With Ninject
Sending a Command on the Bus
Publishing an Event on the Bus
Request Response
Multicast Request Response
Multicast Request Response - take First
Large Message Support