dispatch<TEvent extends DomainEvent> method

Future<void> dispatch<TEvent extends DomainEvent>(
  1. TEvent event, [
  2. DispatchStrategy? dispatchStrategy
])

Dispatches the given event to the registered EventHandler's.

Implementation

Future<void> dispatch<TEvent extends DomainEvent>(
  TEvent event, [
  DispatchStrategy? dispatchStrategy,
]) async {
  late final eventRuntimeType = event.runtimeType;

  final handlers = {
    // Add handlers for TEvent.
    ..._eventHandlerStore.getHandlersFor(TEvent),
    // If a base type was used, add handlers for the runtime type.
    if (eventRuntimeType != TEvent)
      ..._eventHandlerStore.getHandlersFor(eventRuntimeType)
  };

  for (final observer in _observers) {
    observer.onDispatch(event, handlers);
  }

  await (dispatchStrategy ?? _defaultDispatchStrategy)
      .execute(handlers, event, _observers);
}