1

我正在尝试在我想要的地方添加一个 MessageSent 事件:

  1. 查看消息是否是从 saga 处理程序发送的。

  2. 如果我们在一个 saga 中,访问相应的 SagaData 实例。

对于第一点,我知道我必须检查 MessageContext 是否有一个带有键“SagaContextItemKey”的项目,但是我在从事件内部获取 saga 数据实例时非常迷茫。这甚至可能吗?

4

1 回答 1

1

可以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
}

我想这可以实现你所追求的。

我很好奇你想做什么?

于 2014-11-03T19:06:34.007 回答