Горячий шоколад - можно ли реализовать собственный тип объекта с помощью дженериков?

Я написал следующий класс объектного типа.

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()}");

Затем я понял, что моя настоящая проблема в том, что я вообще определяю имя. Если вы не переопределите имя, оно автоматически получит уникальное имя / ключ на основе определения типа.

Другие вопросы по тегам