public void Call(IRequest request, IResponse response) { if (request == null) throw new ArgumentNullException(nameof(request)); if (response == null) throw new ArgumentNullException(nameof(response)); var controllerName = request.GetControllerName(); var methodName = request.GetMethodName(); var methodInfo = _apiDiscoverer.Resolve(controllerName, methodName); if(!PreCallCheck(methodInfo, request, response)) { return; } var result = GetCallMethod(methodInfo)(request); response.SetResult(result); if (!PostCallCheck(methodInfo, request, response)) { return; } }