我有一个使用 Hotchocolate 和 GraphQL 公开的类。
在这个类中,我有一些属性和具有以下签名的公共方法:
public Expression<Func<Parcelle, bool>> ToLambdaExpression()
默认情况下,Hot Chocolate 选择公共方法并将它们公开为 graphql 模式中的字段。我设法用这样的对象类型扩展来忽略它们:
protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteriaExpression> descriptor)
{
descriptor.Ignore(t => t.TokenizeExpression());
}
对于返回简单类型的方法来说,它大部分时间都有效。但是当我尝试对我的
ToLambdaExpression
方法执行此操作时,我在模式验证期间收到错误。
public class ParcelSelectionCriteriaExtension : ObjectTypeExtension<ParcelSelectionCriteria>
{
protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteria> descriptor)
{
descriptor.Ignore(t => t.ToLambdaExpression());
}
}
HotChocolate.SchemaException: For more details look at the `Errors` property.
1. Unable to infer or resolve a schema type from the type reference `Expression (Input)`.
如果我评论
ToLambdaExpression
方法,一切都会正常。看起来即使我忽略该字段,它也会尝试解析其类型,并且由于它是一个 Expression<Func<Parcelle, bool>>
,因此它无法弄清楚如何输入它。
有没有办法让HotChocolate完全忽略这个方法而不需要创建DTO?
对我来说,使用“类型定义”更自然(语义上),但不使用类型扩展。 在这种情况下,以下方法应该有效:
public class ParcelSelectionCriteria
{
public Expression<Func<Parcelle, bool>> ToLambdaExpression()
{
throw new NotImplementedException();
}
}
public class ParcelSelectionCriteriaType : ObjectType<ParcelSelectionCriteria>
{
protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteria> descriptor)
{
descriptor.Field(t => t.ToLambdaExpression()).Ignore();
}
}