@@ -726,7 +726,26 @@ private void ReplaceArguments(HubMethodDescriptor descriptor, HubMethodInvocatio
726726 var hubInvocationArgumentPointer = 0 ;
727727 for ( var parameterPointer = 0 ; parameterPointer < arguments . Length ; parameterPointer ++ )
728728 {
729- if ( hubMethodInvocationMessage . Arguments ? . Length > hubInvocationArgumentPointer &&
729+ // populate the synthetic arguments first
730+ if ( descriptor . IsServiceArgument ( parameterPointer ) )
731+ {
732+ arguments [ parameterPointer ] = descriptor . GetService ( scope . ServiceProvider , parameterPointer , descriptor . OriginalParameterTypes [ parameterPointer ] ) ;
733+ }
734+ else if ( descriptor . OriginalParameterTypes [ parameterPointer ] == typeof ( CancellationToken ) )
735+ {
736+ cts = CancellationTokenSource . CreateLinkedTokenSource ( connection . ConnectionAborted ) ;
737+ arguments [ parameterPointer ] = cts . Token ;
738+ }
739+ else if ( isStreamCall && ReflectionHelper . IsStreamingType ( descriptor . OriginalParameterTypes [ parameterPointer ] , mustBeDirectType : true ) )
740+ {
741+ Log . StartingParameterStream ( _logger , hubMethodInvocationMessage . StreamIds ! [ streamPointer ] ) ;
742+ var itemType = descriptor . StreamingParameters ! [ streamPointer ] ;
743+ arguments [ parameterPointer ] = connection . StreamTracker . AddStream ( hubMethodInvocationMessage . StreamIds [ streamPointer ] ,
744+ itemType , descriptor . OriginalParameterTypes [ parameterPointer ] ) ;
745+
746+ streamPointer ++ ;
747+ }
748+ else if ( hubMethodInvocationMessage . Arguments ? . Length > hubInvocationArgumentPointer &&
730749 ( hubMethodInvocationMessage . Arguments [ hubInvocationArgumentPointer ] == null ||
731750 descriptor . OriginalParameterTypes [ parameterPointer ] . IsAssignableFrom ( hubMethodInvocationMessage . Arguments [ hubInvocationArgumentPointer ] ? . GetType ( ) ) ) )
732751 {
@@ -736,29 +755,8 @@ private void ReplaceArguments(HubMethodDescriptor descriptor, HubMethodInvocatio
736755 }
737756 else
738757 {
739- if ( descriptor . OriginalParameterTypes [ parameterPointer ] == typeof ( CancellationToken ) )
740- {
741- cts = CancellationTokenSource . CreateLinkedTokenSource ( connection . ConnectionAborted ) ;
742- arguments [ parameterPointer ] = cts . Token ;
743- }
744- else if ( descriptor . IsServiceArgument ( parameterPointer ) )
745- {
746- arguments [ parameterPointer ] = descriptor . GetService ( scope . ServiceProvider , parameterPointer , descriptor . OriginalParameterTypes [ parameterPointer ] ) ;
747- }
748- else if ( isStreamCall && ReflectionHelper . IsStreamingType ( descriptor . OriginalParameterTypes [ parameterPointer ] , mustBeDirectType : true ) )
749- {
750- Log . StartingParameterStream ( _logger , hubMethodInvocationMessage . StreamIds ! [ streamPointer ] ) ;
751- var itemType = descriptor . StreamingParameters ! [ streamPointer ] ;
752- arguments [ parameterPointer ] = connection . StreamTracker . AddStream ( hubMethodInvocationMessage . StreamIds [ streamPointer ] ,
753- itemType , descriptor . OriginalParameterTypes [ parameterPointer ] ) ;
754-
755- streamPointer ++ ;
756- }
757- else
758- {
759- // This should never happen
760- Debug . Assert ( false , $ "Failed to bind argument of type '{ descriptor . OriginalParameterTypes [ parameterPointer ] . Name } ' for hub method '{ descriptor . MethodExecutor . MethodInfo . Name } '.") ;
761- }
758+ // This should never happen
759+ Debug . Assert ( false , $ "Failed to bind argument of type '{ descriptor . OriginalParameterTypes [ parameterPointer ] . Name } ' for hub method '{ descriptor . MethodExecutor . MethodInfo . Name } '.") ;
762760 }
763761 }
764762 }
@@ -896,4 +894,4 @@ private static void SetActivityError(Activity? activity, Exception ex)
896894 activity ? . SetTag ( "error.type" , ex . GetType ( ) . FullName ) ;
897895 activity ? . SetStatus ( ActivityStatusCode . Error ) ;
898896 }
899- }
897+ }
0 commit comments