2016-04-28 6 views
1

Bei der Probe-ShoppingWeb der ShoppingCartStateMachine gibt es eine Konfiguration, wie diese Ereignisse planen:Wie wird ein geplantes Ereignis mit Verzögerung dynamisch auf MassTransit deklariert?

Schedule(() => CartExpired, x => x.ExpirationId, x => 
      { 
       x.Delay = TimeSpan.FromSeconds(10); 
       x.Received = e => e.CorrelateById(context => context.Message.CartId); 
      }); 

Beachten Sie, dass „x.Delay“ Eigenschaft, dass auf Konstruktor gesetzt ist, aber auf meinem Fall würde ich das informieren, Zeitverzögerung dynamisch.

When(ApproveOrder) 
       .Then(context => 
       { 
        context.Instance.EstimatedTime = context.Data.EstimatedTime; 
        context.Instance.Status = context.Data.Status; 
       }) 

... und stellen Sie einen Zeitplan Ereignis mit "context.Data.EstimatedTime" Delay z.B.

Es gibt eine Möglichkeit, dies zu tun, mit "Schedule" -Deklaration auf State Machine Constructor-Klasse?

Antwort

1

Die in einem Zustandsautomaten verwendete Erweiterung Schedule wurde erweitert, um dynamische Verzögerungen zu unterstützen. Zum Beispiel können Sie folgendermaßen vorgehen:

When(ApproveOrder) 
    .Then(context => context.Instance.EstimatedTime = context.Data.EstimatedTime) 
    .Schedule(CartExpired, context => context.Instance.EstimatedTime) 

Dies wird die Verzögerung von dem zweiten Argument verwenden statt der angegeben wird, wenn der Zeitplan erstellt wurde.