/// <summary> /// Applies the offset paging middleware to the current field. /// </summary> /// <param name="descriptor"> /// The object field descriptor. /// </param> /// <param name="itemType"> /// The schema type representation of the item. /// </param> /// <param name="entityType"> /// The entity type represents the runtime type of the item. /// </param> /// <param name="resolvePagingProvider"> /// A delegate allowing to dynamically define a paging resolver for a field. /// </param> /// <param name="options"> /// The paging settings that shall be applied to this field. /// </param> /// <returns> /// Returns the field descriptor for chaining in other configurations. /// </returns> public static IObjectFieldDescriptor UseOffsetPaging( this IObjectFieldDescriptor descriptor, Type?itemType = null, Type?entityType = null, GetOffsetPagingProvider?resolvePagingProvider = null, PagingOptions options = default) { if (descriptor is null) { throw new ArgumentNullException(nameof(descriptor)); } resolvePagingProvider ??= ResolvePagingProvider; descriptor.AddOffsetPagingArguments(); PagingHelper.UsePaging( descriptor, entityType, (services, source, name) => resolvePagingProvider(services, source, name), options); descriptor .Extend() .OnBeforeCreate((c, d) => { MemberInfo?resolverMember = d.ResolverMember ?? d.Member; d.Type = CreateTypeRef(c, resolverMember, itemType, options); d.CustomSettings.Add(typeof(CollectionSegment)); }); return(descriptor); }