public void PublishDomainUpdate(object[] events, DomainUpdateMetadate metadata) { if (_logger.IsDebugEnabled) _logger.Debug("Publishing a domain update for " + metadata.AggregateType); Publish(new DomainUpdateBusMessage { Events = events.Select(e => JsonSerializer.Serialize(e)).ToArray(), Metadata = metadata }); }
private void HandleDomainUpdate(object[] events, DomainUpdateMetadate metadata) { using (var scope = _container.BeginLifetimeScope()) { var hook = scope.ResolveOptional<IDomainUpdateServiceBusHandlerHook>(); if (hook != null) hook.PreHandle(events, metadata); try { foreach (var @event in events) { if (hook != null) hook.PreHandleEvent(@event, metadata); var eventType = @event.GetType(); List<Type> handlerTypes; if (_eventTypesWithHandlers.TryGetValue(eventType, out handlerTypes)) { foreach (var handlerType in handlerTypes) { var handler = scope.Resolve(handlerType); handler.AsDynamic().Handle(@event); } } if (hook != null) hook.PostHandleEvent(@event, metadata); } if (hook != null) hook.PostHandle(events, metadata); } catch (Exception ex) { if (hook != null) hook.Exception(ex, events, metadata); throw; } } }
public void FromEventStore() { _mongo.GetDatabase() .Drop(); RegisterHandlers(typeof(Rebuild).Assembly); foreach (var commit in _eventStore.Advanced.GetFrom(DateTime.MinValue) .OrderBy(c => c.CommitStamp)) { var metadata = new DomainUpdateMetadate { AggregateId = Guid.Parse(commit.Headers[AggregateRootMetadata.AggregateIdHeader] as string), AggregateType = commit.Headers[AggregateRootMetadata.AggregateTypeHeader] as string, Tenant = commit.Headers[AggregateRootMetadata.TenantHeader] as string, ApplicationService = "Rebuilder", LastVersion = commit.StreamRevision }; HandleDomainUpdate(commit.Events.Select(e => e.Body).ToArray(), metadata); } }
public void Exception(System.Exception ex, object[] events, DomainUpdateMetadate metadata) { }
public void PostHandleEvent(object @event, DomainUpdateMetadate metadata) { }
public void PostHandle(object[] events, DomainUpdateMetadate metadata) { }
public void PreHandle(object[] events, DomainUpdateMetadate metadata) { _tenantContext.SetTenantId(metadata.Tenant); }