ScopedContextData VS LocalContextData VS ContextData in Hot Chocolate

问题描述

热巧克力中的 ScopedContextDataLocalContextDataContextData 之间有什么区别?

解决方法

上下文数据:

这是全局上下文数据。此请求中的所有解析器均可访问此数据。

你可以设置:

 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");

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...