热巧克力中的 ScopedContextData VS LocalContextData VS ContextData

ScopedContextData VS LocalContextData VS ContextData in Hot Chocolate

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:

仅在解析器管道内可用。这可用于在 middlewares.This 之间进行通信是一个不可变的,可以通过上下文在解析器或中间件中进行修改:

context.LocalContextData = context.LocalContextData.SetItem("foo","bar");