我正在尝试在我想要的地方添加一个 MessageSent 事件:
查看消息是否是从 saga 处理程序发送的。
如果我们在一个 saga 中,访问相应的 SagaData 实例。
对于第一点,我知道我必须检查 MessageContext 是否有一个带有键“SagaContextItemKey”的项目,但是我在从事件内部获取 saga 数据实例时非常迷茫。这甚至可能吗?
您可以IStoreSagaData
通过使用在插入/更新时将 saga 数据复制到消息上下文的东西来装饰实现来获取 saga 数据- 例如,如下所示:
public class SagaDataSnatcher : IStoreSagaData
{
public SagaDataSnatcher(IStoreSagaData innerSagaPersister) {
this.innerSagaPersister = innerSagaPersister;
}
public void Insert(ISagaData data, string[] sagaDataPropertyPathsToIndex) {
innerSagaPersister.Insert(data, sagaDataPropertyPathsToIndex);
SnatchIt(data);
}
public void Update(ISagaData data, string[] sagaDataPropertyPathsToIndex) {
innerSagaPersister.Update(data, sagaDataPropertyPathsToIndex);
SnatchIt(data);
}
void SnatchIt(ISagaData data) {
MessageContext.GetCurrent().Items["my-secret-key"] = data;
}
// other ISagaData members down here, just delegate to inner
}
我想这可以实现你所追求的。
我很好奇你想做什么?