问题描述
我正在尝试使用 MongoDB 和 HotChocolate 在 NetCore 中创建一个 GraphQL 服务器,查询类已经定义:
public class Query
{
[UseMongoDbPaging]
[UseProjection]
[UseSorting]
[UseFiltering]
public IExecutable<Area> GetAreas([Service] IMongoCollection<Area> collection)
{
return collection.AsExecutable();
}
[UseFirstOrDefault]
public IExecutable<Area> GetAreaById(
[Service] IMongoCollection<Area> collection,[ID] string id)
{
return collection.Find(x => x.Id == id).AsExecutable();
}
}
我正在关注 HotChocolate 文档中的这个示例: HotChocolate with mongoDb
但我收到此错误:
"extensions": {
"message": "No service for type 'MongoDB.Driver.IMongoCollection`1[DLMDashboard.Server.Models.Area]' has been registered.","stackTrace": " at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider,Type serviceType)\n at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)\n at HotChocolate.Execution.Processing.MiddlewareContext.Service[T]()\n at lambda_method96(Closure,IResolverContext )\n at HotChocolate.Types.FieldMiddlewareCompiler.<>c__DisplayClass3_0.<<CreateResolverMiddleware>b__0>d.MoveNext()\n--- End of stack trace from previous location ---\n at HotChocolate.Data.MongoDb.Filters.MongoDbFilterProvider.<>c__DisplayClass5_0`1.<<CreateExecutor>g__ExecuteAsync|1>d.MoveNext()\n--- End of stack trace from previous location ---\n at HotChocolate.Data.MongoDb.Sorting.MongoDbSortProvider.<>c__DisplayClass5_0`1.<<CreateExecutor>g__ExecuteAsync|1>d.MoveNext()\n--- End of stack trace from previous location ---\n at HotChocolate.Data.MongoDb.MongoDbProjectionProvider.<CreateExecutor>g__ExecuteAsync|2_1[TEntityType](FieldDelegate next,IMiddlewareContext context)\n at HotChocolate.Types.Pagination.PagingMiddleware.InvokeAsync(IMiddlewareContext context)\n at HotChocolate.Utilities.MiddlewareCompiler`1.ExpressionHelper.AwaitTaskHelper(Task task)\n at HotChocolate.Execution.Processing.ResolverTask.ExecuteResolverPipelineAsync(CancellationToken cancellationToken)\n at HotChocolate.Execution.Processing.ResolverTask.TryExecuteAsync(CancellationToken cancellationToken)"
}
这是我的startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMongoClient,MongoClient>(sp => new
MongoClient(Configuration.GetConnectionString("Connection"))
);
services.AddScoped(c => c.GetService<IMongoClient>()?.StartSessionAsync());
services
.AddGraphQLServer()
.AddQueryType<Query>()
.AddDefaultTransactionScopeHandler()
.EnableRelaySupport()
// Registers the filter convention of MongoDB
.AddMongoDbFiltering()
// Registers the sorting convention of MongoDB
.AddMongoDbSorting()
// Registers the projection convention of MongoDB
.AddMongoDbProjections();
services.AddInMemorySubscriptions();
services.AddRedisSubscriptions((sp) =>
ConnectionMultiplexer.Connect("host:port"));
}
有什么想法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)