示例#1
0
        public PagedResult <TResult> Execute <TResult>(int pageNumber, int itemsPerPage, IPagedQuery <TResult> query)
        {
            var     handlerType  = typeof(IPagedQueryHandler <,>).MakeGenericType(query.GetType(), typeof(TResult));
            dynamic queryHandler = _lifetimeScope.Resolve(handlerType);

            int skip = (pageNumber - 1) * itemsPerPage;
            int take = itemsPerPage;

            return(queryHandler.Handle(skip, take, (dynamic)query) as PagedResult <TResult>);
        }
示例#2
0
        public Task <IPagedEnumerable <TResult> > ExecuteAsync <TResult>(IPagedQuery <TResult> query, CancellationToken cancellationToken = default) where TResult : class
        {
            if (query is null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            var queryType = query.GetType();

            var handler = (PagedQueryHandlerWrapper <TResult>)_pagedQueryHandlers.GetOrAdd(queryType,
                                                                                           t => Activator.CreateInstance(typeof(PagedQueryHandlerWrapperImpl <,>).MakeGenericType(queryType, typeof(TResult))));

            return(handler.Execute(query, cancellationToken, this.container));
        }