@@ -82,52 +82,68 @@ public Task<object> Receive(object message)
8282 return Current . Receive ( message ) ;
8383 }
8484
85- public Task Become ( Receive behavior )
85+ public Task Become ( Receive behavior ) => HandleBecome ( behavior , Behaviors . Become . Message ) ;
86+ public Task Become < TArg > ( Receive behavior , TArg arg ) => HandleBecome ( behavior , new Become < TArg > ( arg ) ) ;
87+
88+ Task HandleBecome ( Receive behavior , Become message )
8689 {
8790 Requires . NotNull ( behavior , nameof ( behavior ) ) ;
88- var name = behavior . Method . Name ;
91+
92+ var state = states . Find ( behavior . Method . Name )
93+ ?? new State ( behavior . Method . Name , behavior ) ;
8994
90- var configured = states . Find ( name ) ;
91- return Become ( configured ?? new State ( name , behavior ) ) ;
95+ return HandleBecome ( state , message ) ;
9296 }
9397
94- public Task Become ( string behavior )
98+ public Task Become ( string behavior ) => HandleBecome ( behavior , Behaviors . Become . Message ) ;
99+ public Task Become < TArg > ( string behavior , TArg arg ) => HandleBecome ( behavior , new Become < TArg > ( arg ) ) ;
100+
101+ Task HandleBecome ( string behavior , Become message )
95102 {
96103 Requires . NotNull ( behavior , nameof ( behavior ) ) ;
97104
98- return Become ( State ( behavior ) ) ;
105+ return HandleBecome ( State ( behavior ) , message ) ;
99106 }
100107
101- public Task BecomeStacked ( Receive behavior )
108+ public Task BecomeStacked ( Receive behavior ) => HandleBecomeStacked ( behavior , Behaviors . Become . Message ) ;
109+ public Task BecomeStacked < TArg > ( Receive behavior , TArg arg ) => HandleBecomeStacked ( behavior , new Become < TArg > ( arg ) ) ;
110+
111+ Task HandleBecomeStacked ( Receive behavior , Become message )
102112 {
103113 Requires . NotNull ( behavior , nameof ( behavior ) ) ;
104- var name = behavior . Method . Name ;
114+
115+ var state = states . Find ( behavior . Method . Name )
116+ ?? new State ( behavior . Method . Name , behavior ) ;
105117
106- var configured = states . Find ( name ) ;
107- return BecomeStacked ( configured ?? new State ( name , behavior ) ) ;
118+ return HandleBecomeStacked ( state , message ) ;
108119 }
109120
110- public Task BecomeStacked ( string behavior )
121+ public Task BecomeStacked ( string behavior ) => HandleBecomeStacked ( behavior , Behaviors . Become . Message ) ;
122+ public Task BecomeStacked < TArg > ( string behavior , TArg arg ) => HandleBecomeStacked ( behavior , new Become < TArg > ( arg ) ) ;
123+
124+ Task HandleBecomeStacked ( string behavior , Become message )
111125 {
112126 Requires . NotNull ( behavior , nameof ( behavior ) ) ;
113- return BecomeStacked ( State ( behavior ) ) ;
127+
128+ return HandleBecomeStacked ( State ( behavior ) , message ) ;
114129 }
115130
116- async Task BecomeStacked ( State next )
131+ async Task HandleBecomeStacked ( State next , Become message )
117132 {
118133 history . Push ( Current ) ;
119- await Become ( next ) ;
134+
135+ await HandleBecome ( next , message ) ;
120136 }
121137
122138 public async Task Unbecome ( )
123139 {
124140 if ( history . Count == 0 )
125141 throw new InvalidOperationException ( "The previous behavior has not been recorded. Use BecomeStacked method to stack behaviors" ) ;
126142
127- await Become ( history . Pop ( ) ) ;
143+ await HandleBecome ( history . Pop ( ) , Behaviors . Become . Message ) ;
128144 }
129145
130- async Task Become ( State next )
146+ async Task HandleBecome ( State next , Become message )
131147 {
132148 if ( ! Initialized ( ) )
133149 throw new InvalidOperationException ( "Initial behavior should be set before calling Become" ) ;
@@ -146,7 +162,7 @@ async Task Become(State next)
146162 Previous = Current ;
147163 Current = next ;
148164
149- await next . HandleBecome ( transition ) ;
165+ await next . HandleBecome ( transition , message ) ;
150166 await next . HandleActivate ( transition ) ;
151167
152168 transition = null ;
0 commit comments