复杂类型的 HotChocolate (GraphQL) 模式优先方法
HotChocolate (GraphQL) schema first approach on complex type
我是 HotChocolate 的新手,我正在尝试 PoC 一些简单的用法。
我创建了非常简单的 .graphql 文件:
#camera.graphql
type Camera {
id: ID!
name: String!
}
type Query {
getCamera: Camera!
}
还有一个非常简单的相机包装 .NET 代码:
public class QlCamera
{
public static QlCamera New()
{
return new QlCamera
{
Id = Guid.NewGuid().ToString(),
Name = Guid.NewGuid().ToString()
};
}
public string Id { get; set; }
public string Name { get; set; }
}
以及用于架构创建的此类内容:
public void CreateSchema()
{
string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var smBuilder = SchemaBuilder.New();
smBuilder.AddDocumentFromFile(path + "/GraphQL/camera.graphql");
smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());
var schema = smBuilder.Create();
}
但是在最后一行我得到了一个例外:
HotChocolate.SchemaException: '发生多个模式错误:
字段 Camera.id
没有解析器。 - 类型:相机
字段 Camera.name
没有解析器。 - 类型:相机
'
我尝试创建:
public class QlCameraType : ObjectType<QlCamera>
{
protected override void Configure(IObjectTypeDescriptor<QlCamera> descriptor)
{
descriptor.Name("Camera");
descriptor.Field(t => t.Id).Type<NonNullType<StringType>>();
descriptor.Field(t => t.Name).Type<StringType>();
}
}
并替换
smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());
和
smBuilder.AddResolver("Query", "getCamera", () => new QlCameraType());
但我仍然遇到同样的异常。
显然我在这里错过了什么,但我不明白到底是什么。
有人可以解释一下我错过了什么吗?
(我已经通过了几次文档,但我在那里找不到相关的帮助)
如例外情况明确指出 - "Camera" type/object.
的特定字段("id" 和 "name")没有绑定左轮手枪
所以他们只需要加上:
smBuilder.AddResolver("Camera", "id", rc => rc.Parent<QlCamera>().Id);
smBuilder.AddResolver("Camera", "name", rc => rc.Parent<QlCamera>().Name);
就是这样。
我是 HotChocolate 的新手,我正在尝试 PoC 一些简单的用法。 我创建了非常简单的 .graphql 文件:
#camera.graphql
type Camera {
id: ID!
name: String!
}
type Query {
getCamera: Camera!
}
还有一个非常简单的相机包装 .NET 代码:
public class QlCamera
{
public static QlCamera New()
{
return new QlCamera
{
Id = Guid.NewGuid().ToString(),
Name = Guid.NewGuid().ToString()
};
}
public string Id { get; set; }
public string Name { get; set; }
}
以及用于架构创建的此类内容:
public void CreateSchema()
{
string path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var smBuilder = SchemaBuilder.New();
smBuilder.AddDocumentFromFile(path + "/GraphQL/camera.graphql");
smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());
var schema = smBuilder.Create();
}
但是在最后一行我得到了一个例外:
HotChocolate.SchemaException: '发生多个模式错误:
字段 Camera.id
没有解析器。 - 类型:相机
字段 Camera.name
没有解析器。 - 类型:相机
'
我尝试创建:
public class QlCameraType : ObjectType<QlCamera>
{
protected override void Configure(IObjectTypeDescriptor<QlCamera> descriptor)
{
descriptor.Name("Camera");
descriptor.Field(t => t.Id).Type<NonNullType<StringType>>();
descriptor.Field(t => t.Name).Type<StringType>();
}
}
并替换
smBuilder.AddResolver("Query", "getCamera", () => QlCamera.New());
和
smBuilder.AddResolver("Query", "getCamera", () => new QlCameraType());
但我仍然遇到同样的异常。
显然我在这里错过了什么,但我不明白到底是什么。 有人可以解释一下我错过了什么吗?
(我已经通过了几次文档,但我在那里找不到相关的帮助)
如例外情况明确指出 - "Camera" type/object.
的特定字段("id" 和 "name")没有绑定左轮手枪所以他们只需要加上:
smBuilder.AddResolver("Camera", "id", rc => rc.Parent<QlCamera>().Id);
smBuilder.AddResolver("Camera", "name", rc => rc.Parent<QlCamera>().Name);
就是这样。