Ejemplo n.º 1
0
        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);
            }
        }