在.net Core中将通用类与graphql一起使用

时间:2018-10-29 05:44:28

标签: c# .net-core graphql asp.net-core-2.0 asp.net-core-webapi

我是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和泛型类的教程,但是没有提到使用这种泛型类。

有人可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

花了几个小时后,我有以下解决方法。

  1. RangeModel.cs定义为:

    public class RangeModel<TFrom, TTo>
    {
        public TFrom From { get; set; }
    
        public TTo To { get; set; }
    }
    
  2. 定义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<>));
        }
    }
    
  3. 这是我的查询参数:

    studentsQueryArguments.Add(new QueryArgument<RangeModelType<double?, double?>> {Name = "age", Description = "Age range of student."});
    

我不知道此实现是否良好。现在,它解决了我的问题。

希望获得帮助。