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);
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }