Nservicebus如何处理structuremap上的嵌套容器?

Nservicebus如何处理structuremap上的嵌套容器?,nservicebus,structuremap,nservicebus6,Nservicebus,Structuremap,Nservicebus6,TL;博士某些属性在应该注入服务时没有被注入服务。Nservicebus如何处理structuremap上的嵌套容器 嘿,伙计们,新来的。我目前正在将我们的项目升级到NSB6。我对Structuremap的依赖注入有几个问题 我们有一些用于使用ISendOnlyBus的服务,我们从处理程序内部调用ISendOnlyBus。出于测试目的(我只是想让处理程序正常工作),我将它们更改为IMessageHandlerContext,并在处理程序开始时将上下文注入容器。正如预期的那样,IMessageHa

TL;博士某些属性在应该注入服务时没有被注入服务。Nservicebus如何处理structuremap上的嵌套容器

嘿,伙计们,新来的。我目前正在将我们的项目升级到NSB6。我对Structuremap的依赖注入有几个问题

我们有一些用于使用ISendOnlyBus的服务,我们从处理程序内部调用ISendOnlyBus。出于测试目的(我只是想让处理程序正常工作),我将它们更改为IMessageHandlerContext,并在处理程序开始时将上下文注入容器。正如预期的那样,IMessageHandlerContext在这些服务上得到了解决,我能够使用它

public class MyMessageHandler : IHandleMessage<IMyMessage>
{
    private IContainer _container;
    private ISomeService _someService;
    public MyMessageHandler (IContainer container, ISomeService someService)
    {
        _container = container;
        _someService = someService;
    }

    public async Task Handle(IMyMessage message, IMessageHandlerContext context)
    {
        _container.Inject(typeof(IMessageHandlerContext), context);
        _someService.DoSomething();
    }
}

public class SomeService : ISomeService
{
    private IMessageHandlerContext _context;
    public SomeService(IMessageHandlerContext context)
    {
        _context = context;
    }
    public void DoSomething()
    {
        _context.Send<ISomeMessage>(x => {
            //... init message
        });
    }
}
公共类MyMessageHandler:IHandleMessage
{
私人集装箱;
私人服务(someService);;
公共MyMessageHandler(IContainer容器、ISomeService someService)
{
_容器=容器;
_someService=someService;
}
公共异步任务句柄(IMyMessage消息、IMessageHandlerContext上下文)
{
_container.Inject(typeof(IMessageHandlerContext),context);
_someService.DoSomething();
}
}
公共类SomeService:ISomeService
{
私有IMessageHandlerContext _context;
公共服务(IMessageHandlerContext)
{
_上下文=上下文;
}
公共无效剂量测定法()
{
_context.Send(x=>{
//…初始化消息
});
}
}

现在的问题是,我们在发送nservicebus消息的实体上有一个Nhibernate自定义IPosupdateEventListener。在版本5上,它有一个用于发送的ISendOnlyEndpoint,与其他服务相同,但这次Structuremap没有解析上下文。我想知道nservicebus如何以及是否管理消息处理程序中的嵌套容器。我似乎找不到任何关于它的文档。

我猜建议的重构应该是

public class MyMessageHandler : IHandleMessage<IMyMessage>
{

    public async Task Handle(IMyMessage message, IMessageHandlerContext context)
    {
        context.Resolve<ISomeService>().DoSomething(context);
    }
}

public class SomeService : ISomeService
{
    public void DoSomething(IMessageHandlerContext context)
    {
        context.Send<ISomeMessage>(x => {
            //... init message
        });
    }
}
公共类MyMessageHandler:IHandleMessage
{
公共异步任务句柄(IMyMessage消息、IMessageHandlerContext上下文)
{
context.Resolve().DoSomething(context);
}
}
公共类SomeService:ISomeService
{
公共void DoSomething(IMessageHandlerContext上下文)
{
context.Send(x=>{
//…初始化消息
});
}
}
context.Resolve
将是您为访问上下文实例中的容器实例而编写的扩展

但是,如果只想从消息处理程序外部发送消息,则可以插入启动总线时返回的
IEndpointInstance
IMessageSession

我认为他们建议只使用上下文从消息处理程序发送消息,但有时这根本不起作用。

StructureMap中的子容器不支持NServiceBus容器所需的某些功能。策略用于配置注入,子容器中不支持策略


NServiceBus.StructureMap repo中存在跟踪问题。

它无法与StructureMap一起工作:此问题尚未解决: