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));
        }
Esempio n. 2
0
        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);
        }