public List<string> GetImplementedActions(Type serviceType, Type requestType) { if (!typeof(IService).IsAssignableFrom(serviceType)) throw new NotSupportedException("All Services must implement IService"); return serviceType.GetActions() .Where(x => x.GetParameters()[0].ParameterType == requestType) .Select(x => x.Name.ToUpper()) .ToList(); }
public List<string> GetImplementedActions(Type serviceType, Type requestType) { if (typeof(IService).IsAssignableFrom(serviceType)) { return serviceType.GetActions() .Where(x => x.GetParameters()[0].ParameterType == requestType) .Select(x => x.Name.ToUpper()) .ToList(); } var oldApiActions = serviceType .GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly) .Select(x => ToNewApiAction(x.Name)) .Where(x => x != null) .ToList(); return oldApiActions; }
public void RegisterService(ITypeFactory serviceFactoryFn, Type serviceType) { var processedReqs = new HashSet<Type>(); if (IsServiceType(serviceType)) { foreach (var mi in serviceType.GetActions()) { var requestType = mi.GetParameters()[0].ParameterType; if (processedReqs.Contains(requestType)) continue; processedReqs.Add(requestType); RegisterServiceExecutor(requestType, serviceType, serviceFactoryFn); var returnMarker = requestType.GetTypeWithGenericTypeDefinitionOf(typeof(IReturn<>)); var responseType = returnMarker != null ? returnMarker.GetGenericArguments()[0] : mi.ReturnType != typeof(object) && mi.ReturnType != typeof(void) ? mi.ReturnType : AssemblyUtils.FindType(requestType.FullName + ResponseDtoSuffix); RegisterRestPaths(requestType); appHost.Metadata.Add(serviceType, requestType, responseType); if (typeof(IRequiresRequestStream).IsAssignableFrom(requestType)) { this.RequestTypeFactoryMap[requestType] = req => { var restPath = req.GetRoute(); var request = RestHandler.CreateRequest(req, restPath, req.GetRequestParams(), requestType.CreateInstance()); var rawReq = (IRequiresRequestStream)request; rawReq.RequestStream = req.InputStream; return rawReq; }; } if (Log.IsDebugEnabled) Log.DebugFormat("Registering {0} service '{1}' with request '{2}'", responseType != null ? "Reply" : "OneWay", serviceType.GetOperationName(), requestType.GetOperationName()); } } }