public IQueryHandlerCollection Add <TQuery, TResult>(IQueryHandler <TQuery, TResult> handler) where TQuery : IQuery <TResult> { Ensure.NotNull(handler, "handler"); storage[typeof(TQuery)] = new DefaultQueryHandlerDefinition <TQuery, TResult>(handler); return(this); }
public IQueryHandlerCollection Add <TQuery, TOutput>(IQueryHandler <TQuery, TOutput> handler) where TQuery : IQuery <TOutput> { Ensure.NotNull(handler, "handler"); DefaultQueryHandlerDefinition <TOutput> definition = new DefaultQueryHandlerDefinition <TOutput>(handler, query => handler.HandleAsync((TQuery)query)); storage[typeof(TQuery)] = definition; return(this); }
public Task <TOutput> QueryAsync <TOutput>(IQuery <TOutput> query) { Ensure.NotNull(query, "query"); DefaultQueryHandlerDefinition definition; Type queryType = query.GetType(); if (storage.TryGetValue(queryType, out definition)) { DefaultQueryHandlerDefinition <TOutput> target = (DefaultQueryHandlerDefinition <TOutput>)definition; return(target.HandleAsync(query)); } throw Ensure.Exception.ArgumentOutOfRange("query", "There isn't query handler for query of type '{0}'.", queryType.FullName); }