Как преобразовать перечисление в тип EnumerationGraphType, который использует GraphQL? Вот пример, иллюстрирующий то, о чем я говорю:
public enum MeetingStatusType
{
Tentative,
Unconfirmed,
Confirmed,
}
public class MeetingDto
{
public string Id { get; set; }
public string Name { get; set; }
public MeetingStatusType Status { get; set; }
}
public class MeetingStatusEnumType : EnumerationGraphType<MeetingStatusType>
{
public MeetingStatusEnumType()
{
Name = "MeetingStatusType";
}
}
public class MeetingType : ObjectGraphType<MeetingDto>
{
public MeetingType()
{
Field(m => m.Id);
Field(m => m.Name, nullable: true);
Field<MeetingStatusEnumType>(m => m.Status); // Fails here
}
}
Очевидно, это не работает, потому что нет неявного преобразования из MeetingStatusType в MeetingStatusEnumType. В документации, модели, которые они сопоставляли, будут полагаться непосредственно на MeetingStatusEnumType, но кажется неправильным вводить зависимость GraphQL от чего-то вроде типов и объектов вашего домена.
Я чувствую, что мне не хватает болезненно простого способа зарегистрировать это поле, но я не могу понять это для своей жизни. Любая помощь будет принята с благодарностью!
Появляются две ошибки: Cannot implicitly convert type 'MeetingStatusType' to 'MeetingStatusEnumType'Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type Это определение перегрузки поля, которое я использую: public FieldType Field<TGraphType>(string name, string description = null, QueryArguments arguments = null, Func<ResolveFieldContext<TSourceType>, object> resolve = null, string deprecationReason = null) where TGraphType : IGraphType;





Похоже, мне не следовало пытаться использовать перегрузку выражений для сопоставления полей. Переключение на следующее вместо этого, похоже, решило проблему:
Field(e => e.Id);
Field(e => e.Name, nullable: true);
Field<MeetingStatusEnumType>("meetingStatus", resolve: e => e.Source.Status);
Вам нужно сообщить graphql dotnet, как сопоставить тип Enum с типом EnumerationGraphType.
GraphTypeTypeRegistry.Register(typeof(MeetingStatusType), typeof(EnumerationGraphType<MeetingStatusType>));
Это опечатка? Я не вижу ничего подобного GraphTypeTypeRegistry
Вот, не опечатка... GraphTypeTypeRegistry
Другой путь;
Field(m => m.Status, type: typeof(EnumerationGraphType<MeetingStatusType>));
Можете ли вы показать определение
Field<T>или точное сообщение об ошибке? Я могу найти только тот, у которого первым параметром является строка.