Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }