public async Task <TResult> DispatchAsync <TResult>(IQuery <TResult> query, CancellationToken cancellationToken = default) { dynamic handler = _scope.ResolveOptional(typeof(IHandleQuery <,>).MakeGenericType(query.GetType(), typeof(TResult))) ?? throw new InvalidOperationException($"No handler found for {query.DisplayName()}"); _log.Verbose("Dispatching {eventType} to {handlerType}", query.DisplayName(), TypeExtensions.DisplayName(handler)); return(await handler.HandleAsync((dynamic)query, cancellationToken)); }
public async Task DispatchAsync <T>(T @event, CancellationToken cancellationToken = default) where T : IEvent { var handlers = (IEnumerable <dynamic>)_scope.ResolveOptional(typeof(IEnumerable <>).MakeGenericType(typeof(IHandleEvent <>).MakeGenericType(@event.GetType()))); foreach (dynamic handler in handlers) { _log.Verbose("Dispatching {eventType} to {handlerType}", @event.DisplayName(), TypeExtensions.DisplayName(handler)); await handler.HandleAsync((dynamic)@event, cancellationToken); } }
public async Task DispatchAsync <T>(T command, CancellationToken cancellationToken = default) where T : ICommand { dynamic handler = _scope.ResolveOptional(typeof(IHandleCommand <>).MakeGenericType(command.GetType())) ?? throw new InvalidOperationException($"No handler registered for {command.DisplayName()}"); _log.Verbose("Dispatching {commandType} to {handlerType}", command.DisplayName(), TypeExtensions.DisplayName(handler)); await handler.HandleAsync((dynamic)command, cancellationToken); }