33using Polly ;
44using Polly . Wrap ;
55using System ;
6- using System . Collections . Concurrent ;
76using System . Collections . Generic ;
87using System . Linq ;
98using System . Net ;
@@ -20,18 +19,15 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http
2019 /// </summary>
2120 public class ResilientHttpClient : IHttpClient
2221 {
23- private HttpClient _client ;
24- private readonly ConcurrentDictionary < string , PolicyWrap > _policiesPerOrigin ;
25- private ILogger < ResilientHttpClient > _logger ;
26- private readonly Func < string , IEnumerable < Policy > > _policyCreator ;
22+ private readonly HttpClient _client ;
23+ private readonly ILogger < ResilientHttpClient > _logger ;
24+ private PolicyWrap _policyWrap ;
2725
28-
29- public ResilientHttpClient ( Func < string , IEnumerable < Policy > > policyCreator , ILogger < ResilientHttpClient > logger )
26+ public ResilientHttpClient ( IEnumerable < Policy > policies , ILogger < ResilientHttpClient > logger )
3027 {
3128 _client = new HttpClient ( ) ;
3229 _logger = logger ;
33- _policiesPerOrigin = new ConcurrentDictionary < string , PolicyWrap > ( ) ;
34- _policyCreator = policyCreator ;
30+ _policyWrap = Policy . Wrap ( policies . ToArray ( ) ) ;
3531 }
3632
3733
@@ -128,36 +124,15 @@ private Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string ur
128124 }
129125
130126 private Task < T > HttpInvoker < T > ( string origin , Func < Task < T > > action )
131- {
132- var policyWrapper = GetPolicyForOrigin ( origin ) ;
133-
134- if ( policyWrapper != null )
135- {
136- // Executes the action applying all
137- // the policies defined in the wrapper
138- return policyWrapper . ExecuteAsync ( ( ) => action ( ) ) ;
139- }
140- else
141- {
142- throw new InvalidOperationException ( $ "PolicyWrapper can't be created for origin { origin } ") ;
143- }
144- }
145-
146- private PolicyWrap GetPolicyForOrigin ( string origin )
147127 {
148128 var normalizedOrigin = NormalizeOrigin ( origin ) ;
149129
150- if ( ! _policiesPerOrigin . TryGetValue ( normalizedOrigin , out PolicyWrap policyWrapper ) )
151- {
152- policyWrapper = Policy . WrapAsync ( _policyCreator ( normalizedOrigin )
153- . ToArray ( ) ) ;
154-
155- _policiesPerOrigin . TryAdd ( normalizedOrigin , policyWrapper ) ;
156- }
157-
158- return policyWrapper ;
130+ // Executes the action applying all
131+ // the policies defined in the wrapper
132+ return _policyWrap . ExecuteAsync ( ( ) => action ( ) , new Context ( normalizedOrigin ) ) ;
159133 }
160134
135+
161136 private static string NormalizeOrigin ( string origin )
162137 {
163138 return origin ? . Trim ( ) ? . ToLower ( ) ;
0 commit comments