public RestClientBuilder(string baseAddress = null) { if (baseAddress != null) { var baseUrl = baseAddress; if (!baseUrl.EndsWith("/")) { baseUrl += "/"; } _httpClientFactory.Configure(client => { client.BaseAddress = new Uri(baseUrl, UriKind.Absolute); }); } _container = new RestContainerBuilder(); _container.Register(StringValueFormatter.Instance); _container.Register <NullableValueFormatter>(); _container.Register <DefaultRequestQueryValueFormatter>(); _container.Register <DefaultRequestRouteValueFormatter>(); _container.Register <RestSerializer>(); _container.Register <RestMetadataProvider>(); _container.Register <HttpRequestContentMapper>(); _container.Register <DefaultHttpRequestContentFormatter>(); _container.Register <RestRouteRenderer>(); _container.Register <DefaultHttpRequestMapper>(); _container.Register <DefaultHttpResponseMapper>(); _container.Register(_logger); _container.Register(_httpClientFactory); _container.Register(_httpExecutionLogger); _container.Register(_httpExecutionStrategy); _container.Register(_defaultCultureProvider); _container.Register(_defaultContentEncodingProvider); _container.Register(_defaultMediaTypeProvider); }
public TContract CreateProxy <TContract>(Action <EndpointProxyBuilder> proxyConfigurator) where TContract : class { var proxyType = ProxyFactory.GetProxyType <EndpointProxy, TContract>(); var metadataProvider = _container.Required <RestMetadataProvider>(); var valuesProvider = new MetadataValueProvider(); var metadata = metadataProvider.GetEndpointMetadata(typeof(TContract), valuesProvider); var proxyBuilder = new RestContainerBuilder(_container); proxyBuilder.Register <DefaultRequestBinder>(); proxyBuilder.Register <DefaultResponseBinder>(); proxyBuilder.Register <DefaultRequestQueryValueFormatter>(); proxyBuilder.Register <DefaultRequestRouteValueFormatter>(); proxyBuilder.Register <RestModelMapper>(); proxyConfigurator?.Invoke(new EndpointProxyBuilder(proxyBuilder)); var proxyContainer = proxyBuilder.CreateContainer(); var proxy = Activator.CreateInstance(proxyType, new object[] { this, metadata, proxyContainer }); return((TContract)proxy); }