Пример #1
0
        private Metadata.Command BuildCommand(string prefix, Metadata.Service service, MethodInfo command, HashSet <Assembly> assemblies)
        {
            string commandName = ExternalNameAttribute.GetName(command);

            if (ServiceVersionAttribute.CheckVersion(command, version, ref commandName))
            {
                var  parMetas  = new List <Metadata.Parameter>();
                bool isHttpRaw = false;
                foreach (var par in command.GetParameters())
                {
                    if (par.ParameterType == typeof(Microsoft.AspNetCore.Http.HttpContext))
                    {
                        isHttpRaw = true;
                        var parMeta = new Metadata.Parameter
                        {
                            IsOptional         = par.IsOptional,
                            IsPlatformSpecific = true,
                            ParameterType      = new Metadata.TypeInfo {
                                Type = par.ParameterType
                            },
                            ParameterInfo = par
                        };
                        parMetas.Add(parMeta);
                    }
                    else
                    {
                        string parName = ExternalNameAttribute.GetName(par);
                        var    parMeta = new Metadata.Parameter
                        {
                            Name          = parName,
                            IsOptional    = par.IsOptional,
                            ParameterType = ConvertType(par.ParameterType, assemblies),
                            ParameterInfo = par
                        };
                        parMetas.Add(parMeta);
                    }
                }
                var commandMeta = new Metadata.Command
                {
                    Name       = commandName.ToCamelCase(),
                    Fullname   = prefix + commandName.ToLower(),
                    Parameters = parMetas,
                    ReturnType = ConvertType(command.ReturnType, assemblies),
                    MethodInfo = command,
                    Service    = service,
                    IsQuery    = command.IsDefined(typeof(QueryAttribute)),
                    IsHttpRaw  = isHttpRaw
                };
                return(commandMeta);
            }
            return(null);
        }
Пример #2
0
        private Metadata.Service BuildService(Type service, string prefix, HashSet <Assembly> assemblies)
        {
            string serviceName = ExternalNameAttribute.GetName(service);

            if (ServiceVersionAttribute.CheckVersion(service, version, ref serviceName))
            {
                var commandMetas = new Dictionary <string, Metadata.Command>(StringComparer.InvariantCultureIgnoreCase);
                var serviceMeta  = new Metadata.Service {
                    Name = serviceName, Type = service
                };
                foreach (var command in service.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly))
                {
                    var commandMeta = BuildCommand($"{prefix}.v{version}.{serviceName}.".ToLower(), serviceMeta, command, assemblies);
                    if (commandMeta != null)
                    {
                        commandMetas.Add(commandMeta.Name, commandMeta);
                    }
                }
                serviceMeta.Commands = commandMetas;
                return(serviceMeta);
            }
            return(null);
        }