One of the things I’ve missed since we integrated container support is the ability to quickly and easily create an instance of the ServiceBus. After Ayende agreed, I decided it was time to do something about it.
Behold the minimum amount of code necessary to create a service bus:
IObjectBuilder objectBuilder = YourContainer;
IEndpointFactory endpointFactory = EndpointFactoryConfigurator.New(x =>
{
x.SetObjectBuilder(objectBuilder);
x.RegisterTransport< MsmqEndpoint >();
});
// add the endpointFactory to your container
IServiceBus bus = ServiceBusConfigurator.New(x =>
{
x.SetObjectBuilder(objectBuilder);
x.ReceiveFrom("msmq://localhost/mt_client");
});
That’s it. In fact, you can easily mock out the container with some nifty Rhino.Mocks usage:
ObjectBuilder = MockRepository.GenerateMock< IObjectBuilder >(); ISubscriptionCache subscriptionCache = new LocalSubscriptionCache(); ObjectBuilder.Stub(x => x.GetInstance< ISubscriptionCache >()) .Return(subscriptionCache); ITypeInfoCache typeInfoCache = new TypeInfoCache(); ObjectBuilder.Stub(x => x.GetInstance< ITypeInfoCache >()) .Return(typeInfoCache); ObjectBuilder.Stub(x => x.GetInstance< IEndpointFactory >()) .Return(endpointFactory);
I’m starting to convert the tests to use the mocked container approach to reduce the runtime of the tests. But so far the HeavyLoad, Starbucks and WinFormSample samples have been verified to work with the new model. The Windsor facility is also using the new model (Dru is going to update the other two tomorrow).
I’m pretty happy with the new configuration syntax, it certainly makes it easier to setup a bus with zero XML abuse. Look for more of this style of configuration/extension in MT in the near future.
[...] Code-based Configuration Syntax A new, code-based method of configuring and running a service bus has been added. This syntax significantly simplifies getting started with MassTransit and has been used throughout the unit tests. The facilities for Castle have also been updated to transparently use this new syntax with the same XML-style configuration in Windsor. More details on this syntax can be found here. [...]