#graphql #hotchocolate
Вопрос:
В HotChocolate у меня есть тип запроса примерно такой
// QueryType.cs
public Task<ContentCategory> FilterContentAsync(string categoryCode, ICollection<Filter> filters, CancellationToken cancellationToken = default)
=> ...;
// Filter.cs
public abstract class Filter
{
public string Type { get;set; }
}
// BooleanFilter.cs
public class BooleanFilter : Filter
{
public bool IsTrue { get; set; }
}
// NumberRangeFilter.cs
public class NumberRangeFilter : Filter
{
public int Min { get; set; }
public int Max { get; set; }
}
когда я запускаю приложение, я получаю следующую ошибку
1. Unable to infer or resolve a schema type from the type reference `Input: Filter`.
Поддерживается ли следующий запрос:
filterContent (categoryCode: "All", filters: [{type: "boolean", isTrue: true}, {type: "numberrange", min: 10, max: 60}]) {
id
}
Ответ №1:
Похоже, что в настоящее время это не реализовано.
Вот проблема в репозитории hotchocolate. В настоящее время (июль 2021 года) он открыт и имеет ярлык «невыполненная работа», поэтому я могу предположить, что объединения ввода еще не реализованы.
А вот твит одного из разработчиков hotChocolate, где он говорит
Мы реализуем специальное предложение #graphql oneof для горячего шоколада 12… пусть приходят входные союзы 🙂
Кстати, есть еще одна ссылка на обсуждение возможных реализаций проблемы объединения входных данных. Таким образом, в соответствии с этим, существует 7 различных идей о том, как изменить спецификацию, 1 победитель (7-й вариант) и ни одной ссылки на возможные реализации.
Комментарии:
1. Продолжение. Команда HC говорит, что пока они не будут реализовывать эту функцию, потому что это решение не входит в спецификацию. Но у меня есть идея, как реализовать это самостоятельно. Короче говоря, используйте метод переопределения синтаксического анализа в классе InputObjectType для определения типа реального наследника, а также отключите проверку входных параметров ValueVisitor. Используйте отражение. Пожалуйста, смотрите более подробное описание в моем комментарии