Это все та же идея.
Чтобы обработать запрос GraphQL, вы должны создать новый экземпляр ExecutionInput
и настроить его параметры для каждого запроса. Одной из его настроек является объект Context
(это обобщенный тип c Object
, поэтому вы можете сами определять свой тип). Просто убедитесь, что этот Context
объект содержит DataLoaderRegistry
и убедитесь, что вы создаете новый экземпляр Context
с новым экземпляром DataLoaderRegistry
, который регистрирует новый экземпляр DataLoader
.
Код мудрый, выглядит так:
public class MyContext {
private DataLoaderRegistry dataLoaderRegistry;
public MyContext(DataLoaderRegistry dataLoaderRegistry){
this.dataLoaderRegistry = dataLoaderRegistry;
}
}
//Process a GraphQL request
DataLoaderRegistry dataLoaderRegistry = new DataLoaderRegistry();
dataLoaderRegistry.register("fooDataLoder" , DataLoader.newDataLoader("......."));
MyContext context = new MyContext(dataLoaderRegistry);
ExecutionInput executionInput = ExecutionInput.newExecutionInput()
.query("employees {id name department}")
.context(context)
.dataLoaderRegistry(context.getDataLoaderRegistry())
.build();
GraphQL graphQL = GraphQL.newGraphQL(schema).build();
ExecutionResult executionResult = graphQL.execute(executionInput);
Небольшое отличие состоит в том, что в некоторых более поздних версиях graphql- java вам не нужно явно настройте DataLoaderDispatcherInstrumentation
для GraphQL
как это , так как оно будет автоматически активировано, если оно не настроено. Вместо этого просто убедитесь, что вы настроили тот же dataLoaderRegistry
для ExecutionInput
, который вы установили для Context
, потому что DataLoaderDispatcherInstrumentation
требуется доступ к DataLoaderRegistry
из него.