Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }