protected override void Complete(IConventionContext context) { if (Definition.Provider is null) { throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope); } if (Definition.ProviderInstance is null) { _provider = context.Services.GetOrCreateService <IProjectionProvider>(Definition.Provider) ?? throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope); } else { _provider = Definition.ProviderInstance; } if (_provider is IProjectionProviderConvention init) { IReadOnlyList <IProjectionProviderExtension> extensions = CollectExtensions(context.Services, Definition); init.Initialize(context); MergeExtensions(context, init, extensions); init.Complete(context); } }
public static ISchemaError ProjectionConvention_UnableToCreateFieldHandler( IProjectionProvider convention, Type fieldHandler) => SchemaErrorBuilder.New() .SetMessage( DataResources.FilterProvider_UnableToCreateFieldHandler, fieldHandler.FullName ?? fieldHandler.Name, convention.GetType().FullName ?? convention.GetType().Name) .SetExtension(nameof(convention), convention) .SetExtension(nameof(fieldHandler), fieldHandler) .Build();
private void GenerateQueryResult() { if (this.description.CountOption == RequestQueryCountOption.ValueOnly) { this.description.VerifyProtocolVersion(RequestDescription.Version2Dot0, this.service); this.description.VerifyRequestVersion(RequestDescription.Version2Dot0, this.service); this.description.VerifyAndRaiseResponseVersion(RequestDescription.Version2Dot0, this.service); this.queryExpression = this.queryExpression.QueryableLongCount(); } else if (this.rootProjectionNode != null) { IExpandProvider service = this.service.Provider.GetService <IExpandProvider>(); if (service != null) { if (this.IsStandardPaged) { throw new DataServiceException(500, System.Data.Services.Strings.DataService_SDP_TopLevelPagedResultWithOldExpandProvider); } if (this.rootProjectionNode.ProjectionsSpecified) { throw new DataServiceException(500, System.Data.Services.Strings.DataService_Projections_ProjectionsWithOldExpandProvider); } if (this.rootProjectionNode.ExpansionOnDerivedTypesSpecified) { throw new DataServiceException(500, System.Data.Services.Strings.DataService_DerivedExpansions_OldExpandProvider); } this.ProcessOrderBy(); this.ProcessSkipAndTop(); this.queryExpression = Expression.Call(Expression.Constant(service), ApplyExpansionsMethodInfo, this.queryExpression, Expression.Constant(this.rootProjectionNode.ExpandPaths)); this.rootProjectionNode.UseExpandPathsForSerialization = true; } else { IProjectionProvider projectionProvider = this.service.Provider.ProjectionProvider; if (projectionProvider == null) { projectionProvider = new BasicExpandProvider(this.service.Provider, false, true); } this.queryExpression = Expression.Call(null, DataServiceExecutionProviderMethods.ApplyProjectionsMethodInfo, Expression.Constant(projectionProvider, typeof(object)), this.queryExpression, Expression.Constant(this.rootProjectionNode, typeof(object))); } } else if (!string.IsNullOrEmpty(this.service.OperationContext.Host.GetQueryStringItem("$expand"))) { this.ProjectSkipTokenForNonExpand(); this.ProcessOrderBy(); this.ProcessSkipAndTop(); } }
protected override void OnComplete(IConventionContext context) { if (Definition.Provider is null) { throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope); } if (Definition.ProviderInstance is null) { _provider = context.Services.GetOrCreateService <IProjectionProvider>(Definition.Provider) ?? throw ProjectionConvention_NoProviderFound(GetType(), Definition.Scope); } else { _provider = Definition.ProviderInstance; } if (_provider is IProjectionProviderConvention init) { init.Initialize(context); init.OnComplete(context); } }
public ProjectionOptimizer(IProjectionProvider provider) { _provider = provider; }