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); }
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); }