首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL DataLoader为空上下文

GraphQL DataLoader为空上下文
EN

Stack Overflow用户
提问于 2019-08-30 23:32:54
回答 2查看 773关注 0票数 1

在我使用graphql-dotnet的项目中,我意外地开始收到DataLoader上下文为空的错误:

代码语言:javascript
复制
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.ArgumentNullException: Value cannot be null.
Parameter name: context
  at GraphQL.DataLoader.DataLoaderContextExtensions.GetOrAddBatchLoader[TKey,T](DataLoaderContext context, String loaderKey, Func`3 fetchFunc, IEqualityComparer`1 keyComparer, T defaultValue)

context参数来自注入到图形类型的构造函数中的IDataLoaderContextAccessor。为什么它会是空的?

EN

回答 2

Stack Overflow用户

发布于 2019-08-30 23:32:54

如果在执行查询之前忘记添加DataLoaderDocumentListener,则context参数将为空(如我所做的):

代码语言:javascript
复制
public GraphQLController(
    ISchema schema,
    IDocumentExecuter documentExecuter,
    DataLoaderDocumentListener dataLoaderListener)
{
    _schema = schema;
    _documentExecuter = documentExecuter;
    _dataLoaderListener = dataLoaderListener;
}

[HttpPost]
public async Task<IActionResult> Post([FromBody]BaseGraphQuery query)
{
    var inputs = query.Variables.ToInputs();
    var executionOptions = new ExecutionOptions
    {
        Schema = _schema,
        Query = query.Query,
        Inputs = inputs,
    };

    // Important!
    executionOptions.Listeners.Add(_dataLoaderListener);

    // (Execute the query)
}

并且DataLoaderDocumentListener必须存在于服务容器中:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    // (other service configuration)

    services.AddSingleton<GraphQL.DataLoader.IDataLoaderContextAccessor, GraphQL.DataLoader.DataLoaderContextAccessor>();
    services.AddSingleton<GraphQL.DataLoader.DataLoaderDocumentListener>();
    services.AddSingleton<GraphQL.IDocumentExecuter, GraphQL.DocumentExecuter>();
    services.AddSingleton<GraphQL.Types.ISchema, RootSchema>();
}

这个准确但模糊的错误消息让我很困惑,直到我想起我已经“重构”了一些代码,并错误地删除了Listeners.Add行。

票数 3
EN

Stack Overflow用户

发布于 2020-03-25 21:20:49

此外,您还需要确保在startup.ConfigureServices()中的所有其他内容之前使用services.AddMvc();

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57729603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档