protected virtual async Task <bool> ProcessMessage(string messageName, string payload) { var messageType = subsManager.GetRegisteredMessageType(messageName); if (messageType != null) { using (var scope = lifetimeScope.BeginLifetimeScope(AutofacScopeName)) { Type handlerType = null; if (subsManager.BelongsToCommands(messageName)) { handlerType = typeof(ICommandHandler <>); } if (subsManager.BelongsToEvents(messageName)) { handlerType = typeof(IEventHandler <>); } if (handlerType != null) { var specificType = handlerType.MakeGenericType(messageType); var handler = scope.Resolve(specificType); var message = JsonConvert.DeserializeObject(payload, messageType); try { await(Task) specificType.GetMethod("HandleAsync").Invoke(handler, new object[] { message }); } catch (Exception ex) { // Log and silently drop the message logger.LogError(ex, $"{BrokerName}: {Assembly.GetEntryAssembly().GetName().Name} HandleAsync() exception handling message {messageName}:{payload}"); } } } return(true); } return(false); }