internal static QueryHandlerDelegate <TResult> FromQueryHandler <TQuery, TResult>(IQueryAsyncHandler <TQuery, TResult> queryAsyncHandler) where TQuery : class, IQuery <TResult> { return(new QueryHandlerDelegate <TResult>(async(inputQuery, ct) => { TQuery query = EnsureValidQuery <TQuery, TResult>(inputQuery); return await queryAsyncHandler.HandleAsync(query, ct).ConfigureAwait(false); })); }
internal static QueryHandlerDelegate <TResult> FromFactory <TQuery, TResult>(Func <IQueryAsyncHandler <TQuery, TResult> > queryHandlerFactory) where TQuery : class, IQuery <TResult> { return(new QueryHandlerDelegate <TResult>(async(inputQuery, ct) => { TQuery query = EnsureValidQuery <TQuery, TResult>(inputQuery); IQueryAsyncHandler <TQuery, TResult> instance = EnsureInstanceFromFactory(queryHandlerFactory); return await instance.HandleAsync(query, ct).ConfigureAwait(false); })); }