@@ -54,7 +54,7 @@ protected async Task ProcessAsync(Stream server, ILogger logger, CancellationTok
54
54
55
55
cancellationToken . ThrowIfCancellationRequested ( ) ;
56
56
57
- logger ? . LogDebug ( $ "[thread { Thread . CurrentThread . ManagedThreadId } ] request received, invoking corresponding method ...") ;
57
+ logger ? . LogDebug ( $ "[thread { Thread . CurrentThread . ManagedThreadId } ] request received, invoking ' { request . MethodName } ' ...") ;
58
58
IpcResponse response ;
59
59
using ( IServiceScope scope = ServiceProvider . CreateScope ( ) )
60
60
{
@@ -95,11 +95,22 @@ protected IpcResponse GetReponse(IpcRequest request, IServiceScope scope)
95
95
return IpcResponse . Fail ( $ "Parameter mismatch.") ;
96
96
}
97
97
98
+ Type [ ] genericArguments = method . GetGenericArguments ( ) ;
99
+ if ( genericArguments . Length != request . GenericArguments . Length )
100
+ {
101
+ return IpcResponse . Fail ( $ "Generic arguments mismatch.") ;
102
+ }
103
+
98
104
object [ ] args = new object [ paramInfos . Length ] ;
99
105
for ( int i = 0 ; i < args . Length ; i ++ )
100
106
{
101
107
object origValue = request . Parameters [ i ] ;
102
108
Type destType = paramInfos [ i ] . ParameterType ;
109
+ if ( destType . IsGenericParameter )
110
+ {
111
+ destType = request . GenericArguments [ destType . GenericParameterPosition ] ;
112
+ }
113
+
103
114
if ( _converter . TryConvert ( origValue , destType , out object arg ) )
104
115
{
105
116
args [ i ] = arg ;
@@ -112,6 +123,11 @@ protected IpcResponse GetReponse(IpcRequest request, IServiceScope scope)
112
123
113
124
try
114
125
{
126
+ if ( method . IsGenericMethod )
127
+ {
128
+ method = method . MakeGenericMethod ( request . GenericArguments ) ;
129
+ }
130
+
115
131
object @return = method . Invoke ( service , args ) ;
116
132
if ( @return is Task )
117
133
{
0 commit comments