【问题标题】:Why MassTransit ConsumeContext injected in constructor doesn't contain Message?为什么在构造函数中注入的 MassTransit ConsumeContext 不包含 Message?
【发布时间】:2020-08-17 01:17:02
【问题描述】:

我将 ConsumeContext 注入 MyClass 构造函数。 MyClass 注册为 Scoped 并注入到 MyCommandConsumer 构造函数中。当消费者在Consume 方法中接收到消息时,ConsumeContext 包含Message。但是在 MyClass 构造函数(甚至在 MyCommandConsumer 构造函数)中注入的 ConsumeContext 没有。所有非公共属性都返回 ConsumeContext Not Available 异常(或类似情况)。

我做错了什么?

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    这是因为使用消息的上下文仅限于一条消息。即使消费者在实现IConsumer<T> 的情况下按消息实例化,也只有Consume 消息获得当前消息上下文。这就是 Consume 方法的用途。

    ConsumeContext<T> 不是一个依赖,它是一个上下文,因此它不应该被注入,因为依赖注入,顾名思义,就是用于注入依赖项,而不是用于传递参数。 ConsumeContext<T> 是一个参数,而不是依赖项。

    【讨论】:

      【解决方案2】:

      如果你的消费者的依赖需要发布消息,它应该把IPublishEndpoint放在它的构造函数上。

      如果你的消费者依赖需要发送消息,它应该把ISendEndpointProvider放在它的构造函数上。

      如另一个答案中所述,不推荐取决于ConsumeContext

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 2013-10-23
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        相关资源
        最近更新 更多