1

私がしたい場所に MessageSent イベントを追加しようとしています:

  1. メッセージが saga ハンドラーから送信されたかどうかを表示します。

  2. サガ内にいる場合は、対応する SagaData インスタンスにアクセスします。

最初のポイントとして、MessageContext にキー "SagaContextItemKey" を持つ項目があるかどうかを確認する必要があることはわかっていますが、イベント内からサガ データ インスタンスを取得する際にかなり迷っています。それは可能ですか?

4

1 に答える 1

1

サガデータが挿入/更新されたときにサガデータをメッセージコンテキストにコピーするもので実装を装飾することにより、サガデータを取得できます-たとえば、次のようなものです。IStoreSagaData

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 に答える