Ejemplo n.º 1
0
        /// <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);
            }));
        }
Ejemplo n.º 2
0
        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);
                        }
                    });
                }
            })
                           ));
        }
Ejemplo n.º 3
0
        /// <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);
            }));
        }