我是GraphQL的新手,我正在制作一个小型网站,用于管理学生和上课。
在我的应用程序中,我有一个通用类:
public class RangeModel<TFrom, TTo>
{
#region Propertes
public TFrom From { get; set; }
public TTo To { get; set; }
#endregion
}
此类用于定义具有通用数据类型的范围。 范围可以是:
RangeModel<double?, double?>
RangeModel<int?, int?>
...等等。
我尝试制作一个继承RangeModelType
的{{1}}类:
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");
}
}
当我运行我的应用程序并执行查询时。抛出了一个异常:
无法强制转换类型为GraphQL的GraphQL.Types.ObjectGraphType1 [GraphQlStudy.Models.GraphQL.Types.RangeModelType2 [System.Nullable1 [System.Double],System.Nullable1 [System.Double]]]类型的对象。 Types.ScalarGraphType'。
我一直在寻找使用GraphQL和泛型类的教程,但是没有提到使用这种泛型类。
有人可以帮助我吗?
谢谢
答案 0 :(得分:1)
花了几个小时后,我有以下解决方法。
将RangeModel.cs
定义为:
public class RangeModel<TFrom, TTo>
{
public TFrom From { get; set; }
public TTo To { get; set; }
}
定义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<>));
}
}
这是我的查询参数:
studentsQueryArguments.Add(new QueryArgument<RangeModelType<double?, double?>> {Name = "age", Description = "Age range of student."});
我不知道此实现是否良好。现在,它解决了我的问题。
希望获得帮助。