private async Task ProcessEvent(string eventName, string message) { logger.LogTrace($"Processing RabbitMQ event: {eventName}"); if (subscriptionManager.HasSubscritptionsForEvent(eventName)) { using (var scope = autofac.BeginLifetimeScope()) { var subscriptions = subscriptionManager.GetHandlersForEvent(eventName); foreach (var subscription in subscriptions) { var handler = scope.ResolveOptional(subscription.HandlerType); if (handler == null) { continue; } var eventType = subscriptionManager.GetEventTypeByName(eventName); var integrationEvent = JsonConvert.DeserializeObject(message, eventType); var concreteHandlerType = typeof(IIntegrationEventHandler <>).MakeGenericType(eventType); // TODO: ???? await Task.Yield(); await(Task) concreteHandlerType.GetMethod("Handle") .Invoke(handler, new object[] { integrationEvent }); } } } else { logger.LogWarning($"No subscription for event : {eventName}"); } }