ScopedContextData VS LocalContextData VS ContextData in Hot Chocolate

Viewed 662

What are the differences between ScopedContextData, LocalContextData, and ContextData, in Hot Chocolate?

1 Answers

ContextData:

This is the global context data. This data is accessible for all resolvers in this request.

You can set it with:

 services.AddGraphQLServer()
    .SetContextData("foo", "bar");

if you need access to the HTTP Context:

 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:

Is available for the whole subtree of this resolver This is a immutable that can be modified in resolvers or middlewares via the context:

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

LocalContextData:

Is only available inside the resolver pipeline. This can be used to communicate between middlewares.This is a immutable that can be modified in resolvers or middlewares via the context:

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