public bool TryAddController([NotNull] Type controller, [NotNull] ServicesDefinitions definitions) { var name = _serviceNameMapper.MapServiceName(controller); var methods = (from method in controller.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance) where _actionChecker.IsAvailableAction(method) select method).ToArray(); if (methods.Length == 0) { return(false); } var context = new MethodContexts(definitions); definitions.Services.GetOrCreate(name, () => { var service = new Service(name); foreach (var methodInfo in methods) { var method = _serviceMethodMapper.GetMethod(methodInfo, context); if (method != null) { service.Methods.Add(method); } } return(service); }); return(true); }
public ServiceMethod GetMethod(MethodInfo methodInfo, MethodContexts context) { var method = new ServiceMethod(_methodNameMapper.GetMethodName(methodInfo)); var parameterContext = new MethodParameterContexts(context.Services); var responseContext = new MethodResponseContexts(context.Services); method.SourceMethod = methodInfo; method.HttpMethod = _httpMethodMapper.MapHttpMethod(methodInfo); method.Parameters = (from parameterInfo in methodInfo.GetParameters() let parameter = _serviceMethodParameterMapper.MapServiceMethodParameter(parameterInfo, parameterContext) where parameter != null select parameter).ToList(); method.Url = _methodUrlMapper.MapMethodUrl(methodInfo, method.Parameters); method.Response = _methodReponseMapper.MapMethodResponse(methodInfo, responseContext); method.Comment = _commentsProvider.GetComment(methodInfo); return(method); }