我正在尝试将StructureMap与nServiceBus一起使用。
ObjectFactory.WhatDoIHave()显示StructureMap知道如何构造类。
运行时出现堆积错误。 nServiceBus似乎覆盖了配置?
请注意,当我向我的事件处理程序添加IBus ctor依赖性而没有任何其他配置时,一切都显示正常。
启动端点时出现异常,已记录错误。原因:错误创建名为“nSeviceBusStructureMapTest.TestServer”对象:不合格依赖通过与式[nSeviceBusStructureMapTest.ITestManager]的索引0构造器参数表示:式[nSeviceBusStructureMapTest.ITestManager]的没有唯一对象被定义:类型的不合格依赖[nSeviceBusStructureMapTest。 ITestManager]:期望至少有一个匹配对象来连接对象[nSeviceBusStructureMapTest.TestServer]的构造函数上的[miningServiceManage]参数
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
{
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>
有什么想法吗?
答案 0 :(得分:4)
您必须在端点配置类上指定IWantCustomInitialization。否则NServiceBus将不会调用Init()方法。您还需要指定要使用的序列化程序,因此请添加:
Configure.With() .StructureMapBuilder() .XmlSerializer();
希望这有帮助!