public ProxyOperation <T> Proxy <T>(Func <GraphClient> getGraphClient) where T : class { var proxy = new ProxyOperation <T>(getGraphClient); proxy.Register(this); return(proxy); }
private static ProxyOperation GenerateProxyOperation(ServiceMethodMetadata metadata) { if (metadata.MethodInfo.DeclaringType == null) { return null; } IProxyMetadata proxyMetadata = ServiceContractTypeRegistry.GetProxyMetadata(metadata.MethodInfo.DeclaringType); if (proxyMetadata != null && proxyMetadata.IsHidden(metadata.MethodInfo)) { return null; } IReadOnlyList<XmlDocMetadata> contractDocumentation; XmlDocMetadata methodDocumentation = null; var xmlDocFactory = Rest.Configuration.Options.XmlDocFactory; if (xmlDocFactory != null && xmlDocFactory.Value.TryGetValue(metadata.MethodInfo.DeclaringType, out contractDocumentation)) { methodDocumentation = contractDocumentation.FirstOrDefault(x => x.Method == metadata.MethodInfo); } var operation = new ProxyOperation { ServiceUrl = metadata.ServiceUrl, UrlTempate = GetUrlTemplate(metadata, proxyMetadata), HttpMethod = metadata.UrlInfo.HttpMethods.First(), SupportedHttpMethods = GetSupportedHttpMethods(metadata), MetadataUrl = String.Concat("metadata?oid=", metadata.ServiceMethodId), ProxyUrl = String.Concat("proxy?oid=", metadata.ServiceMethodId), Description = GetDescription(metadata.MethodInfo, proxyMetadata, methodDocumentation), LongDescription = GetLongDescription(metadata.MethodInfo, proxyMetadata, methodDocumentation), ResultType = metadata.MethodInfo.ReturnType, RouteParameters = GetParameters(metadata, proxyMetadata), HttpsPort = proxyMetadata != null && proxyMetadata.GetHttps(metadata.MethodInfo) != null ? proxyMetadata.GetHttps(metadata.MethodInfo).Port : 0, IsIPFiltered = proxyMetadata != null && proxyMetadata.IsIPFiltered(metadata.MethodInfo), DoesNotSupportJson = proxyMetadata != null && !proxyMetadata.HasJsonSupport(metadata.MethodInfo), DoesNotSupportXml = proxyMetadata != null && !proxyMetadata.HasXmlSupport(metadata.MethodInfo), Credentials = GetCredentials(metadata, proxyMetadata), AdditionalHeaders = proxyMetadata != null ? proxyMetadata.GetHeaders(metadata.MethodInfo) : new List<HeaderMetadata>() }; operation.StatusCodes = GetStatusCodes(metadata.MethodInfo, proxyMetadata, operation.HasResource, operation.HasResponse, operation.HttpsPort > 0); operation.HasResource = HasResource(metadata, operation.HttpMethod); Tuple<ResourceExampleMetadata, ResourceExampleMetadata> resourceExampleTypes = GetResourceExampleTypes(metadata.MethodInfo, proxyMetadata); operation.RequestResourceExample = resourceExampleTypes.Item1; operation.ResponseResourceExample = resourceExampleTypes.Item2; return operation; }