public async Task PublishAsync(IHubEvent evt) { var eventHubClient = _eventClients[evt.GetType()]; var eventData = new EventData(Encoding.UTF8.GetBytes(evt.ToJson())); eventData.Properties["ContentType"] = evt.GetType().AssemblyQualifiedName; var partitionKey = evt is IAggregateHubEvent aggregateCommand?aggregateCommand.GetAggregateId() : evt.MessageId.ToString(); await eventHubClient.SendAsync(eventData, partitionKey).ConfigureAwait(false); }
private async Task ProcessHubEvent(Type messageType, IHubEvent hubEvent) { var handlerTypes = _eventHandlers[messageType]; foreach (var handlerType in handlerTypes) { var handler = _handlerActivator.GetInstance(handlerType); var handleMethodInfo = handlerType.GetMethod("HandleAsync"); if (handleMethodInfo == null) { return; } await((Task)handleMethodInfo?.Invoke(handler, new[] { hubEvent })).ConfigureAwait(false); } }