private static DynamicApiRepositoryAction CreateAction(IRepositoryManager repositoryManager, string repositoryName, string actionName, MethodInfo method, MethodInfo interfaceMethod)
        {
            var action = new DynamicApiRepositoryAction
            {
                RepositoryManager = repositoryManager,
                RepositoryName    = repositoryName,
                Parameters        = DynamicApiActionParameter.GetParameters(interfaceMethod),
                Path = new DynamicApiActionPath(repositoryName, actionName),
            };

            action.SetMethod(method);
            return(action);
        }
        /// <summary>
        /// Creates an <see cref="IDynamicApiAction"/> for a repository action.
        /// </summary>
        public IDynamicApiAction CreateRepositoryAction(IRepositoryManager repositoryManager, DynamicApiRequest request)
        {
            if (repositoryManager == null)
            {
                return(null);
            }

            var repositoryName = request.RequestedActionPath.RequestedController;
            var repository     = repositoryManager.GetRepository(repositoryName);

            if (repository == null)
            {
                return(null);
            }

            var actionName = request.RequestedActionPath.RequestedAction;

            if (actionName == "getitem")
            {
                actionName = "get_item";
            }

            var method = repository
                         .GetType()
                         .GetMethods()
                         .FirstOrDefault(e => e.Name.Equals(actionName, StringComparison.InvariantCultureIgnoreCase));

            var interfaceMethod = GetInterfaceMethod(repository, actionName);

            if (method == null || interfaceMethod == null)
            {
                return(null);
            }
            DynamicApiRepositoryAction action = CreateAction(repositoryManager, repositoryName, actionName, method, interfaceMethod);

            return(action);
        }