public async Task PublishAsync(IEvent @event) { var eventName = _store.GetEventKey(@event.GetType()); if (_store.ContainSubscription(eventName)) { var subscriptions = _store.GetHandlers(eventName); foreach (var subscription in subscriptions) { if (subscription.IsDynamic) { var handler = _serviceProvider.GetService(subscription.HandlerType) as IDynamicEventHandler; if (handler == null) { continue; } await handler.Handle(@event); } else { var handler = _serviceProvider.GetService(subscription.HandlerType); if (handler == null) { continue; } var concreteType = typeof(IEventHandler <>).MakeGenericType(@event.GetType()); // ReSharper disable once PossibleNullReferenceException await(Task) concreteType.GetMethod("Handle").Invoke(handler, new object[] { @event }); } } } }
private async Task ProcessEvent(string eventName, string message) { if (_store.ContainSubscription(eventName)) { using (var scope = _serviceScopeFactory.CreateScope()) { var subscriptions = _store.GetHandlers(eventName); foreach (var subscription in subscriptions) { if (subscription.IsDynamic) { IDynamicEventHandler handler = scope.ServiceProvider.GetService(subscription.HandlerType) as IDynamicEventHandler; if (handler == null) { continue; } dynamic eventData = JObject.Parse(message); await handler.Handle(eventData); } else { var handler = scope.ServiceProvider.GetService(subscription.HandlerType); if (handler == null) { continue; } var eventType = _store.GetEventType(eventName); var integrationEvent = Singleton <IJsonConvert> .Instance.DeserializeObject(message, eventType); var concreteType = typeof(IEventHandler <>).MakeGenericType(eventType); // ReSharper disable once PossibleNullReferenceException await(Task) concreteType.GetMethod("Handle").Invoke(handler, new[] { integrationEvent }); } } } } }