Object/Field Metadata

Any IGraphType, IFieldType, Directive, ISchema and some other classes implement the IProvideMetadata interface. This allows you to add arbitrary information to those objects. This can be useful in combination with a validation rule or field middleware.

public interface IProvideMetadata
{
  Dictionary<string, object> Metadata { get; }
  TType GetMetadata<TType>(string key, TType defaultValue = default);
  TType GetMetadata<TType>(string key, Func<TType> defaultValueFactory);
  bool HasMetadata(string key);
}
public class MyGraphType : ObjectGraphType
{
  public MyGraphType()
  {
    Metadata["rule"] = "value";
  }
}