如果我们设置了一个 Saga 并立即Publish(context => ...)
然后一条消息成功地到达总线。
但是,如果我们有类似的东西
Initially(
When(SomeCommand)
.Then(context => { context.Instance.SomeField = 5 })
.TransitionTo(SomeState)
.Then(context => this.RaiseEvent(context.Instance, SomeEvent)));
During(SomeState,
When(SomeEvent)
// ConsumeContext is not available here
.Publish(context => new SomeEventClass
{
Foo = context.Instance.SomeField
})
.Finalize());
机器也永远不会转换到最终状态,大概是因为异常定位了一个 ConsumeContext。
我们已经看到了一些关于将 aConsumeContext
作为参数传递的引用,Publish()
但是不清楚这需要哪个上下文(Intellisense 只是引用了 context1、context2、context3 等)。
有没有办法在已经被调用Publish()
之后使用?RaiseEvent()
如果没有,有没有办法使用其他机制发布事件?
MassTransit 版本是 5.1.5,Automatonymous 是 4.1.2
编辑根据 Chris Patterson 在这里的回答,我们尝试在任何Initially
或之外添加以下内容During
WhenEnter(NewState, state => state.Publish(context =>
new EventClass { Foo = context.Instance.Foo }
)
.Finalize();
但是它仍然没有发布任何内容,并且状态永远不会转换为Final
. 如果我们添加 aThen
它也永远不会碰到这个代码块。似乎没有发生任何异常。我们也尝试过使用When(SomeState.Enter)
,它也不起作用。
附带问题,也许这将有助于我理解为什么Publish
并且RaiseEvent
似乎不能很好地一起玩 - 为什么Publish
需要ConsumeContext
? 是定位总线和绑定吗?