Горячий шоколад - можно ли реализовать собственный тип объекта с помощью дженериков?
Я написал следующий класс объектного типа.
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.'
Кажется, что может возникнуть проблема с объявлением двух преобразователей одного типа класса. Так ли это? И если да, то какие у меня варианты?
1 ответ
Решение
Мне удалось решить проблему, установив descriptor.Name
к уникальному значению на основе T
.
descriptor.Name($"Response_{typeof(T).GetHashCode()}");
Затем я понял, что моя настоящая проблема в том, что я вообще определяю имя. Если вы не переопределите имя, оно автоматически получит уникальное имя / ключ на основе определения типа.