Skip to content

Commit

Permalink
Moved the Field declaration for shared resolvers to the non-generic…
Browse files Browse the repository at this point in the history
… object type descriptor.
  • Loading branch information
jbray1982 authored and michaelstaib committed Dec 6, 2018
1 parent 70ca8ef commit 811829a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 41 deletions.
22 changes: 11 additions & 11 deletions src/Types/Types/Descriptors/IObjectTypeDescriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,17 @@ IObjectTypeDescriptor Interface<T>()
/// </param>
IObjectFieldDescriptor Field(NameString name);

/// <summary>
/// Specifies an object type field which is bound to a resolver type.
/// </summary>
/// <param name="propertyOrMethod">
/// An expression selecting a property or method of
/// <typeparamref name="TResolver"/>.
/// The resolver type containing the property or method.
/// </param>
IObjectFieldDescriptor Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod);

IObjectTypeDescriptor Directive<T>(T directive)
where T : class;

Expand Down Expand Up @@ -156,17 +167,6 @@ public interface IObjectTypeDescriptor<T>
IObjectFieldDescriptor Field(
Expression<Func<T, object>> propertyOrMethod);

/// <summary>
/// Specifies an object type field which is bound to a resolver type.
/// </summary>
/// <param name="propertyOrMethod">
/// An expression selecting a property or method of
/// <typeparamref name="TResolver"/>.
/// The resolver type containing the property or method.
/// </param>
IObjectFieldDescriptor Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod);

new IObjectTypeDescriptor<T> Directive<TDirective>(TDirective directive)
where TDirective : class;

Expand Down
60 changes: 30 additions & 30 deletions src/Types/Types/Descriptors/ObjectTypeDescriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,30 @@ protected ObjectFieldDescriptor Field(NameString name)
return fieldDescriptor;
}

protected ObjectFieldDescriptor Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod)
{
if (propertyOrMethod == null)
{
throw new ArgumentNullException(nameof(propertyOrMethod));
}

MemberInfo member = propertyOrMethod.ExtractMember();
if (member is PropertyInfo || member is MethodInfo)
{
ObjectFieldDescriptor fieldDescriptor =
CreateResolverDescriptor(
ObjectDescription.ClrType,
typeof(TResolver), member);
Fields.Add(fieldDescriptor);
return fieldDescriptor;
}

throw new ArgumentException(
"A field of an entity can only be a property or a method.",
nameof(member));
}

protected void AddResolverTypes(
IDictionary<string, ObjectFieldDescription> fields)
{
Expand Down Expand Up @@ -295,6 +319,12 @@ IObjectFieldDescriptor IObjectTypeDescriptor.Field(NameString name)
return Field(name);
}

IObjectFieldDescriptor IObjectTypeDescriptor.Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod)
{
return Field(propertyOrMethod);
}

IObjectTypeDescriptor IObjectTypeDescriptor.Directive<T>(T directive)
{
ObjectDescription.Directives.AddDirective(directive);
Expand Down Expand Up @@ -341,30 +371,6 @@ protected void BindFields(BindingBehavior bindingBehavior)
ObjectDescription.FieldBindingBehavior = bindingBehavior;
}

protected ObjectFieldDescriptor Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod)
{
if (propertyOrMethod == null)
{
throw new ArgumentNullException(nameof(propertyOrMethod));
}

MemberInfo member = propertyOrMethod.ExtractMember();
if (member is PropertyInfo || member is MethodInfo)
{
ObjectFieldDescriptor fieldDescriptor =
CreateResolverDescriptor(
ObjectDescription.ClrType,
typeof(TResolver), member);
Fields.Add(fieldDescriptor);
return fieldDescriptor;
}

throw new ArgumentException(
"A field of an entity can only be a property or a method.",
nameof(member));
}

protected override void OnCompleteFields(
IDictionary<string, ObjectFieldDescription> fields,
ISet<MemberInfo> handledMembers)
Expand Down Expand Up @@ -461,12 +467,6 @@ IObjectFieldDescriptor IObjectTypeDescriptor<T>.Field(
return Field(propertyOrMethod);
}

IObjectFieldDescriptor IObjectTypeDescriptor<T>.Field<TResolver>(
Expression<Func<TResolver, object>> propertyOrMethod)
{
return Field(propertyOrMethod);
}

IObjectTypeDescriptor<T> IObjectTypeDescriptor<T>.Directive<TDirective>(
TDirective directive)
{
Expand Down

0 comments on commit 811829a

Please sign in to comment.