0

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

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

我们有一些使用 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
        });
    }
}

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

4

2 回答 2

1

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

策略仅适用于 StructureMap 中的根容器

是 NServiceBus.StructureMap 存储库中的一个问题,用于跟踪它。

于 2017-11-04T06:59:50.770 回答
0

我猜这个建议的重构是

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
        });
    }
}

context.Resolve将是您为访问上下文实例中的容器实例而编写的扩展。

但是,如果您只想从消息处理程序外部发送消息,则可以注入IEndpointInstanceIMessageSession在启动总线时返回。我认为他们建议仅使用上下文从消息处理程序发送消息 - 但有时这不起作用。

于 2017-11-02T00:46:19.627 回答