Hot Chocolate - 是否可以使用泛型实现我自己的对象类型?
Hot Chocolate - Is it possible to implement my own object type with generics?
我写了下面的对象类型class。
public class ResponseType<T> : ObjectType<ResponseEntry<T>>
{
protected override void Configure(IObjectTypeDescriptor<ResponseEntry<T>> descriptor)
{
descriptor.Name("Response");
}
}
我想像这样使用它作为解析器定义中的最外层类型。
descriptor.Field<SharedResolvers>(r => r.GetObject1(default, default, default, default))
.Type<ResponseType<ListType<Object1>>>()
.Name("object1");
descriptor.Field<SharedResolvers>(r => r.GetObject2(default, default, default, default))
.Type<ResponseType<ListType<Object2>>>()
.Name("object2");
如果我只实现 object1
,此代码有效,但是一旦我添加 object2
,我就会收到以下错误。
System.Collections.Generic.KeyNotFoundException: 'The given key 'HotChocolate.Configuration.RegisteredType' was not present in the dictionary.'
似乎声明两个相同 class 类型的解析器可能存在一些问题。是这样吗?如果是这样,我有什么选择?
我能够通过将 descriptor.Name
设置为基于 T
的唯一值来解决问题。
descriptor.Name($"Response_{typeof(T).GetHashCode()}");
然后我意识到我真正的问题是我在定义名称。如果您不覆盖名称,它会根据类型定义自动提供一个唯一的 name/key。
我写了下面的对象类型class。
public class ResponseType<T> : ObjectType<ResponseEntry<T>>
{
protected override void Configure(IObjectTypeDescriptor<ResponseEntry<T>> descriptor)
{
descriptor.Name("Response");
}
}
我想像这样使用它作为解析器定义中的最外层类型。
descriptor.Field<SharedResolvers>(r => r.GetObject1(default, default, default, default))
.Type<ResponseType<ListType<Object1>>>()
.Name("object1");
descriptor.Field<SharedResolvers>(r => r.GetObject2(default, default, default, default))
.Type<ResponseType<ListType<Object2>>>()
.Name("object2");
如果我只实现 object1
,此代码有效,但是一旦我添加 object2
,我就会收到以下错误。
System.Collections.Generic.KeyNotFoundException: 'The given key 'HotChocolate.Configuration.RegisteredType' was not present in the dictionary.'
似乎声明两个相同 class 类型的解析器可能存在一些问题。是这样吗?如果是这样,我有什么选择?
我能够通过将 descriptor.Name
设置为基于 T
的唯一值来解决问题。
descriptor.Name($"Response_{typeof(T).GetHashCode()}");
然后我意识到我真正的问题是我在定义名称。如果您不覆盖名称,它会根据类型定义自动提供一个唯一的 name/key。