如何在Code-First字段解析器中使用自定义DataLoader?
解决HotChocolate v12 Code-First解析器中自定义DataLoader的使用与批处理大小配置问题
1. 配置DataLoaderOptions覆盖默认MaxBatchSize
在依赖注入容器注册自定义DataLoader时,显式传入DataLoaderOptions设置极大值或无限制批处理大小,覆盖默认的1024限制:
services.AddScoped<PersonBatchDataLoader>(sp => { var repository = sp.GetRequiredService<IPersonRepository>(); var batchScheduler = sp.GetRequiredService<IBatchScheduler>(); var options = new DataLoaderOptions<string> { MaxBatchSize = int.MaxValue // 设置为极大值,等效无限制 }; return new PersonBatchDataLoader(repository, batchScheduler, options); });
2. 在Code-First解析器的Resolve方法中获取DataLoader实例
由于context.DataLoader在v12 Code-First写法中不再可用,直接通过context.RequestServices从DI容器获取已注册的自定义DataLoader:
descriptor.Field("myField") .Type<BooleanType>() .Argument( "projectId", a => a .Type<StringType>() .Description("The ID of the current project")) .Resolve(async context => { // 从请求服务容器中获取自定义DataLoader实例 var personLoader = context.RequestServices.GetRequiredService<PersonBatchDataLoader>(); // 使用DataLoader加载数据 var targetPerson = await personLoader.LoadAsync("target-person-id"); // 后续业务逻辑处理 return true; });
关键说明
- 自定义DataLoader的构造参数(
IPersonRepository、IBatchScheduler)会通过DI自动注入,需确保这些服务已提前注册到容器中。 - 若HotChocolate版本支持
MaxBatchSize设为null,可直接赋值null实现严格无限制批处理。
内容的提问来源于stack exchange,提问作者System.Cats.Lol
相关产品推荐
相关产品推荐

