1
+ using System . Threading . Tasks ;
2
+ using NServiceBus ;
3
+
4
+ #region SampleSaga
5
+
6
+ public class DiscountPolicy :
7
+ Saga < DiscountPolicyData > ,
8
+ IAmStartedByMessages < SubmitOrder >
9
+ {
10
+ public Task Handle ( SubmitOrder message , IMessageHandlerContext context )
11
+ {
12
+ Data . CustomerId = message . CustomerId ;
13
+ Data . TotalAmount += message . TotalAmount ;
14
+
15
+ if ( Data . TotalAmount >= 1000 )
16
+ {
17
+ return ProcessWithDiscount ( message , context ) ;
18
+ }
19
+ return ProcessOrder ( message , context ) ;
20
+ }
21
+
22
+ Task ProcessWithDiscount ( SubmitOrder message , IMessageHandlerContext context )
23
+ {
24
+ var processOrder = new ProcessOrder
25
+ {
26
+ CustomerId = Data . CustomerId ,
27
+ OrderId = message . OrderId ,
28
+ TotalAmount = message . TotalAmount * ( decimal ) 0.9
29
+ } ;
30
+ return context . Send ( processOrder ) ;
31
+ }
32
+
33
+ Task ProcessOrder ( SubmitOrder message , IMessageHandlerContext context )
34
+ {
35
+ var processOrder = new ProcessOrder
36
+ {
37
+ CustomerId = Data . CustomerId ,
38
+ OrderId = message . OrderId ,
39
+ TotalAmount = message . TotalAmount
40
+ } ;
41
+ return context . Send ( processOrder ) ;
42
+ }
43
+
44
+ protected override void ConfigureHowToFindSaga ( SagaPropertyMapper < DiscountPolicyData > mapper )
45
+ {
46
+ mapper . MapSaga ( saga => saga . CustomerId )
47
+ . ToMessage < SubmitOrder > ( msg => msg . CustomerId ) ;
48
+ }
49
+ }
50
+
51
+ #endregion
0 commit comments