Problems integrating nServiceBus with StructureMap
        Posted  
        
            by SimonB
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by SimonB
        
        
        
        Published on 2010-03-23T01:38:11Z
        Indexed on 
            2010/03/23
            1:41 UTC
        
        
        Read the original article
        Hit count: 516
        
nservicebus
|structuremap
I'm trying to use StructureMap with nServiceBus.
The Project:
- Uses a GenericHost Endpoint to send command messages
 - Configures nServiceBus using the StructMapBuilder.
 - Uses a simple StructureMap registry config
 - Uses a start up class TestServer supporting IWantToRunAtStartup
 - The TestServer class has ctor dependency on a TestManager class
 - The TestManager class has ctor dependency on IBus
 
ObjectFactory.WhatDoIHave() shows StructureMap knows how to construct the classes.
When run I get buildup errors. nServiceBus seems to be overwriting the config?
Note that when I add a IBus ctor depenendency to my event handlers without any other config all appears fine.
Error:
Exception when starting endpoint, error has been logged. Reason: Error creating object with name 'nSeviceBusStructureMapTest.TestServer' : Unsatisfied dependency expressed through constructor argument with index 0 of type [nSeviceBusStructureMapTest.ITestManager] : No unique object of type [nSeviceBusStructureMapTest.ITestManager] is defined : Unsatisfied dependency of type [nSeviceBusStructureMapTest.ITestManager]: expected at least 1 matching object to wire the [miningServiceManage] parameter on the constructor of object [nSeviceBusStructureMapTest.TestServer]
Source:
using System;
using System.Diagnostics;
using NServiceBus;
using StructureMap;
using StructureMap.Configuration.DSL;
namespace nSeviceBusStructureMapTest
{
    public class TestSmRegistry : Registry
    {
        public TestSmRegistry()
        {
            For<ITestManager>().Use<TestManager>();
            For<TestServer>().Use<TestServer>();
        }
    }
    public class TestEndPoint : AsA_Server, IConfigureThisEndpoint, IWantCustomLogging
    {
        public void Init()
        {
            Configure.With().StructureMapBuilder(ObjectFactory.Container);
            ObjectFactory.Configure(c => c.AddRegistry<TestSmRegistry>());
            Debug.WriteLine(ObjectFactory.WhatDoIHave());
        }
    }
    public class TestServer : IWantToRunAtStartup
    {
        public TestServer(ITestManager miningServiceManage)
        {
            _miningServiceManage = miningServiceManage;
        }
        private readonly ITestManager _miningServiceManage;
        public void Run()
        {
            _miningServiceManage.Run();
        }
        public void Stop() { }
    }
    public interface ITestManager
    {
        void Run();
    }
    public class TestManager : ITestManager
    {
        public TestManager(IBus bus)
        {
            _bus = bus;
        }
        private readonly IBus _bus;
        public void Run()
        {
            if (_bus == null) Debug.WriteLine("Error no bus");
            // Send messages on bus;
        }
    }
}
  <MsmqTransportConfig InputQueue="test" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"  />
  <UnicastBusConfig>
    <MessageEndpointMappings>
    </MessageEndpointMappings>
  </UnicastBusConfig>
Any ideas?
© Stack Overflow or respective owner