问题描述
我将ConsumeContext注入MyClass构造函数中。 MyClass被注册为Scoped,并注入到MyCommandConsumer构造函数中。消费者在Consume方法中收到消息时,ConsumeContext包含Message。但是没有将ConsumeContext注入MyClass构造函数(甚至MyCommandConsumer构造函数)中。所有非公共属性都返回ConsumeContext Not Available异常(或类似的东西)。
我在做什么错了?
解决方法
这是因为使用一条消息的上下文仅限于一条消息。即使使用者实现了IConsumer<T>
时,每个消息都会实例化,但只有Consume
消息会获取当前消息上下文。这就是Consume
方法的目的。
ConsumeContext<T>
不是 依赖项,而是上下文,因此 不应被注入,因为顾名思义,依赖项注入是,用于注入依赖关系,而不用于传递参数。 ConsumeContext<T>
是一个参数,而不是依赖项。
如果消费者的依赖性需要发布消息,则应将IPublishEndpoint
放在其构造函数上。
如果消费者的依赖项需要发送消息,则应在其构造函数上放置ISendEndpointProvider
。
如另一个答案所述,不建议依赖ConsumeContext
。