/// <summary> /// Shortcut for creating a module with single service fragment and all its fields and properties from specified .NET type. /// </summary> public static PackageBuilder Module_Service_Default(this PackageBuilder builder, Type objectType, Action <ServiceBuilder> configure = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (objectType == null) { throw new ArgumentNullException(nameof(objectType)); } return(builder.Module_Service(objectType, serviceBuilder => { var members = objectType.GetMembers(BindingFlags.Public | BindingFlags.Instance); foreach (var member in members) { // ignore GetType, GetHashCode, Equals, ToString if (member.DeclaringType == typeof(object)) { continue; } if (member is MethodInfo method) { serviceBuilder.Method(method.Name, ClrTypeReference.Create(method.ReturnType), (objectType, method)); } } configure?.Invoke(serviceBuilder); })); }
public static PackageBuilder Module_Service_JsonRpc(this PackageBuilder builder, string fragmentName, IEnumerable <JsonRpcMethod> methods) { if (methods == null) { throw new ArgumentNullException(nameof(methods)); } var moduleName = builder.Context.GlobalDescriptor.GetModuleName(builder.Context, fragmentName); return(builder .Module(moduleName, module => module .Service(fragmentName, service => { foreach (var method in methods) { service.Method(method.MethodName.ToPascalInvariant(), ClrTypeReference.Create(method.ReturnType ?? typeof(void)), method, m => { foreach (var parameter in method.Parameters.Where(p => p.Source == JsonRpcParameterSource.Request)) { m.Parameter(parameter.Name, ClrTypeReference.Create(parameter.Type), parameter); } }); } }) )); }
/// <summary> /// Shortcut for creating a module with single object fragment and all its fields and properties from specified .NET type. /// </summary> public static PackageBuilder Module_Object_Default(this PackageBuilder builder, Type objectType, Action <ObjectBuilder> configure = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (objectType == null) { throw new ArgumentNullException(nameof(objectType)); } return(builder.Module_Object(objectType, objectBuilder => { var members = objectType.GetMembers(BindingFlags.Public | BindingFlags.Instance); foreach (var member in members) { if (member is FieldInfo field) { objectBuilder.Field(field.Name, ClrTypeReference.Create(field.FieldType), (objectType, field)); } else if (member is PropertyInfo property) { objectBuilder.Field(property.Name, ClrTypeReference.Create(property.PropertyType), (objectType, property)); } } configure?.Invoke(objectBuilder); })); }