私の場合、__EnumValue
イントロスペクション型を拡張して、本質的に列挙値に関する追加情報を保持したいと考えています。イントロスペクションにフィールドを追加するにはどうすればよいですか。
質問する
913 次
1 に答える
12
ホットチョコレートでは、どのタイプも延長可能です。上記の場合、GraphQL の出力タイプであるオブジェクト タイプを拡張します。
そのために、単純なクラスを作成し、そのクラスにExtendObjectTypeAttribute
.
[ExtendObjectType("__EnumValue")]
public class EnumTypeExtension
{
public string GetAdditionalInfo([Parent] IEnumValue enumValue) =>
enumValue.ContextData["additionalInfo"].ToString();
}
元の型が持つ情報を注入できることに注意してください。この例では、__EnumValue
型のランタイム値を挿入して、追加情報を公開します。
上記は、次の SDL に変換されます。
extend type __EnumValue {
additionalInfo: String!
}
最後に、型拡張をスキーマに登録する必要があります。
services
.AddGraphQL()
.AddQueryType<QueryType>()
.AddTypeExtension<EnumTypeExtension>();
その後、次のようにクエリを実行できます。
query {
__type(name: "MyEnum") {
enumValues {
additionalInfo
}
}
}
仕様が進歩するにつれて、フィールドと衝突する可能性のある新しいフィールドがイントロスペクションに導入される可能性があります。そのため、実際にフィールドを導入し、extensions
そこに拡張フィールドを配置することをお勧めします。これは、GraphQL のリクエストとレスポンスが拡張される方法に従います。
type EnumValueExtensions {
additionalInfo: String!
}
extend type __EnumValue {
extensions: EnumValueExtensions!
}
于 2021-02-03T09:51:17.513 に答える