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

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

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 Ответ

2 голосов
/ 22 января 2020

Мне удалось решить эту проблему, установив для descriptor.Name уникальное значение, основанное на T.

descriptor.Name($"Response_{typeof(T).GetHashCode()}");

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

...