问题描述
热巧克力中的 ScopedContextData
、LocalContextData
和 ContextData
之间有什么区别?
解决方法
上下文数据:
这是全局上下文数据。此请求中的所有解析器均可访问此数据。
你可以设置:
services.AddGraphQLServer()
.SetContextData("foo","bar");
如果您需要访问 HTTP 上下文:
services.AddGraphQLServer()
.AddHttpRequestInterceptor<CustomInterceptor>()
public class CustomInterceptor : DefaultHttpRequestInterceptor
{
public override ValueTask OnCreateAsync(
HttpContext context,IRequestExecutor requestExecutor,IQueryRequestBuilder requestBuilder,CancellationToken cancellationToken)
{
requestBuilder.AddProperty("foo","bar");
return base.OnCreateAsync(context,requestExecutor,requestBuilder,cancellationToken);
}
}
ScopedContextData:
可用于此解析器的整个子树 这是一个不可变的,可以通过上下文在解析器或中间件中进行修改:
context.ScopedContextData = context.ScopedContextData.SetItem("foo","bar");
LocalContextData:
仅在解析器管道内可用。这可以用于中间件之间的通信。这是一个不可变的,可以通过上下文在解析器或中间件中进行修改:
context.LocalContextData = context.LocalContextData.SetItem("foo","bar");