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