>
I’ve just committed support for StructureMap to the NServiceBus trunk so if you are using NSB and prefer StructureMap as your IoC-Container you can get the latest NSB build from teamcity.codebetter.com (thanks Udi for trusting me as a committer)
To configure NSB to use StructureMap use the following syntax:
var bus = Configure.With()
.StructureMapBuilder()
.MsmqSubscriptionStorage()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.ImpersonateSender(false)
.CreateBus()
.Start();
If you are using an explicit instance of the container it can be passed to the builder like this:
var container = new Container();
var bus = Configure.With()
.StructureMapBuilder(container)
...
The bus itself is added to the container by NSB so to get access to is in your code just add a dependency for it the usual way:
public class ClassThatNeedsAccessToTheBus
{
private readonly IBus bus;
public ClassThatNeedsAccessToTheBus(IBus bus)
{
this.bus = bus;
}
public void PerformSomeLogic()
{
bus.Publish(new WhatEverEvent());
}
}
And to fill your message handlers with your own dependencies just configure them in SM and add them as constructor or setter dependencies :
public class MyMessageHandler:IMessageHandler<WhatEverEvent>
{
private IRepository repository;
public MyMessageHandler(IRepository repository)
{
this.repository = repository;
}
public void Handle(WhatEverEvent message)
{
repository.Save(message);
}
}
Edit: You can also configure dependencies using NServiceBus own syntax , more on that here.
If you have any troubles, suggestions etc. let me know directly or post them to the NSB group.