private async Task ProcessEvent(string eventName, string message) { if (_subManager.HasSubscriptionForEvent(eventName)) { using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME)) { var subscriptions = _subManager.GetSubscriptionsForEvent(eventName); foreach (var subscription in subscriptions) { if (subscription.IsDynamic) { var handler = scope.ResolveOptional(subscription.HandlerType) as IDynamicEventHandler; dynamic eventData = JObject.Parse(message); await handler.Handle(eventData); } else { var eventType = _subManager.GetEventType(eventName); var integrationEvent = JsonConvert.DeserializeObject(message, eventType); var handler = scope.ResolveOptional(subscription.HandlerType); var concreteHandler = typeof(IEventHandler <>).MakeGenericType(eventType); await(Task) concreteHandler.GetMethod("Handle").Invoke(handler, new object[] { integrationEvent }); } } } } throw new NotImplementedException(); }