我正在尝试将 StructureMap 与 nServiceBus 一起使用。
该项目:
- 使用 GenericHost 端点发送命令消息
- 使用 StructMapBuilder 配置 nServiceBus。
- 使用简单的 StructureMap 注册表配置
- 使用支持 IWantToRunAtStartup 的启动类 TestServer
- TestServer 类对 TestManager 类具有 ctor 依赖关系
- TestManager 类对 IBus 有 ctor 依赖
ObjectFactory.WhatDoIHave() 表明 StructureMap 知道如何构造类。
运行时出现累积错误。nServiceBus 似乎正在覆盖配置?
请注意,当我在没有任何其他配置的情况下向事件处理程序添加 IBus ctor 依赖性时,一切看起来都很好。
错误:
启动端点时出现异常,已记录错误。原因:创建名称为“nSeviceBusStructureMapTest.TestServer”的对象时出错:通过类型为 [nSeviceBusStructureMapTest.ITestManager] 的索引 0 的构造函数参数表示的依赖关系不满足:没有定义类型 [nSeviceBusStructureMapTest.ITestManager] 的唯一对象:类型 [nSeviceBusStructureMapTest. ITestManager]:预计至少有 1 个匹配对象连接到对象 [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>
有任何想法吗?