Red*_*ane 3 c# .net-core graphql asp.net-core-webapi asp.net-core-2.0
我是GraphQL 的新手,我正在制作一个用于管理学生和课程的小型网站。
在我的应用程序中,我有一个通用类:
public class RangeModel<TFrom, TTo>
{
#region Propertes
public TFrom From { get; set; }
public TTo To { get; set; }
#endregion
}
Run Code Online (Sandbox Code Playgroud)
此类用于定义具有通用数据类型的范围。范围可以是:
RangeModel<double?, double?>
RangeModel<int?, int?>
... 等等。
我尝试制作一个RangeModelType继承的类ObjectGraphType:
public class RangeModelType<TFrom, TTo>: InputObjectGraphType<RangeModel<TFrom, TTo>>
{
public RangeModelType()
{
Field(x => x.From).Description("Minimum range");
Field(x => x.To).Description("Maximum range");
}
}
Run Code Online (Sandbox Code Playgroud)
并定义我的查询如下:
var studentsQueryArguments = new QueryArguments();
studentsQueryArguments.Add(new QueryArgument<ListGraphType<IntGraphType>> { Name = "ids", Description = "Student indexes." });
studentsQueryArguments.Add(new QueryArgument<ObjectGraphType<RangeModelType<double?, double?>>>{Name = "age", Description = "Age range of student."});
Field<ListGraphType<StudentType>>(
"students",
arguments: studentsQueryArguments,
resolve: context =>
{
// Resolve data...
return results;
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序并进行查询时。一个异常被抛出,它说:
无法将 GraphQL.Types.ObjectGraphType1[GraphQlStudy.Models.GraphQL.Types.RangeModelType2[System.Nullable1[System.Double],System.Nullable1[System.Double]]]'类型的对象转换为'GraphQL.Types.ScalarGraphType '。
我一直在寻找使用 GraphQL 和泛型类的教程,但没有提到使用这种泛型类。
谁能帮我 ?
谢谢,
花了几个小时后,我有以下解决方案。
定义RangeModel.cs为:
public class RangeModel<TFrom, TTo>
{
public TFrom From { get; set; }
public TTo To { get; set; }
}
Run Code Online (Sandbox Code Playgroud)定义RangeModelType.cs:
public class RangeModelType<TFrom, TTo> : InputObjectGraphType<RangeModel<TFrom, TTo>>
{
public RangeModelType()
{
var fromType = typeof(TFrom);
Field(x => x.From, fromType.IsGenericType && fromType.GetGenericTypeDefinition() == typeof(Nullable<>));
var toType = typeof(TTo);
Field(x => x.To, toType.IsGenericType && toType.GetGenericTypeDefinition() == typeof(Nullable<>));
}
}
Run Code Online (Sandbox Code Playgroud)这是我的查询参数:
studentsQueryArguments.Add(new QueryArgument<RangeModelType<double?, double?>> {Name = "age", Description = "Age range of student."});
Run Code Online (Sandbox Code Playgroud)不知道这个实现好不好。目前,它解决了我的问题。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |