private async Task LocalExecute(InvokeMessage invokeMessage, ResultMessage result) { try { _logger.LogDebug(JsonConvert.SerializeObject(invokeMessage)); var service = _entryFactory.Find(invokeMessage.ServiceId); var args = new List <object>(); var parameters = invokeMessage.Parameters ?? new Dictionary <string, object>(); foreach (var parameter in service.GetParameters()) { if (parameters.ContainsKey(parameter.Name)) { var parameterType = parameter.ParameterType; var arg = parameters[parameter.Name].CastTo(parameterType); args.Add(arg); } else { args.Add(parameter.DefaultValue); } } var instance = _provider.GetService(service.DeclaringType); var data = service.Invoke(instance, args.ToArray()); if (!(data is Task task)) { result.Data = data; } else { await task; var taskType = task.GetType().GetTypeInfo(); if (taskType.IsGenericType) { var prop = taskType.GetProperty("Result"); if (prop != null) { result.Data = prop.GetValue(task); } } } }
private async Task LocalExecute(InvokeMessage invokeMessage, ResultMessage result) { try { if (_logger.IsEnabled(LogLevel.Debug)) { _logger.LogDebug(JsonConvert.SerializeObject(invokeMessage)); } var entry = _entryFactory.Find(invokeMessage.ServiceId); if (entry.IsNotify) { await entry.Invoke(invokeMessage.Parameters); } else { var data = await entry.Invoke(invokeMessage.Parameters); if (!(data is Task task)) { result.Data = data; } else { await task; var taskType = task.GetType().GetTypeInfo(); if (taskType.IsGenericType) { var prop = taskType.GetProperty("Result"); if (prop != null) { result.Data = prop.GetValue(task); } } } }