protected void HandleDomainUpdate(DomainUpdateBusMessage domainUpdate) { using (var scope = _container.BeginLifetimeScope()) { var events = domainUpdate.Events.Select(e => JsonSerializer.Deserialize(e)).ToArray(); var hook = scope.ResolveOptional<IDomainUpdateServiceBusHandlerHook>(); if (hook != null) hook.PreHandle(events, domainUpdate.Metadata); try { foreach (var @event in events) { if(_logger.IsDebugEnabled) _logger.Debug("Received message contains event with type " + @event.GetType().Name); if (hook != null) hook.PreHandleEvent(@event, domainUpdate.Metadata); var eventType = @event.GetType(); List<Type> handlerTypes; if (_eventTypesWithHandlers.TryGetValue(eventType, out handlerTypes)) { if (_logger.IsDebugEnabled) _logger.Debug("Sending received event to " + handlerTypes.Count + " handlers."); foreach (var handlerType in handlerTypes) { var handler = scope.Resolve(handlerType); handler.AsDynamic().Handle(@event); } } if (hook != null) hook.PostHandleEvent(@event, domainUpdate.Metadata); } if (hook != null) hook.PostHandle(events, domainUpdate.Metadata); } catch (Exception ex) { if (hook != null) hook.Exception(ex, events, domainUpdate.Metadata); throw; } } }
protected override void Publish(DomainUpdateBusMessage message) { _bus.Publish(message); }
protected abstract void Publish(DomainUpdateBusMessage message);
protected override void Publish(DomainUpdateBusMessage message) { HandleDomainUpdate((DomainUpdateBusMessage)JsonSerializer.Deserialize(JsonSerializer.Serialize(message))); }