热巧克力中的 ScopedContextData VS LocalContextData VS ContextData
ScopedContextData VS LocalContextData VS ContextData in Hot Chocolate
Hot Chocolate 中的 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:
仅在解析器管道内可用。这可用于在 middlewares.This 之间进行通信是一个不可变的,可以通过上下文在解析器或中间件中进行修改:
context.LocalContextData = context.LocalContextData.SetItem("foo","bar");
Hot Chocolate 中的 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:
仅在解析器管道内可用。这可用于在 middlewares.This 之间进行通信是一个不可变的,可以通过上下文在解析器或中间件中进行修改:
context.LocalContextData = context.LocalContextData.SetItem("foo","bar");