@@ -31,7 +31,7 @@ public PollyHttpClientBuilderExtensionsTest()
31
31
// Allows the exception from our handler to propegate
32
32
private IAsyncPolicy < HttpResponseMessage > NoOpPolicy { get ; }
33
33
34
- // Matches what our client handler does
34
+ // Matches what our client handler does
35
35
private IAsyncPolicy < HttpResponseMessage > RetryPolicy { get ; }
36
36
37
37
[ Fact ]
@@ -255,7 +255,7 @@ public async Task AddPolicyHandlerFromRegistry_Dynamic_AddsPolicyHandler()
255
255
public async Task AddTransientHttpErrorPolicy_AddsPolicyHandler_HandlesStatusCode ( HttpStatusCode statusCode )
256
256
{
257
257
// Arrange
258
- var handler = new SequenceMessageHandler ( )
258
+ using var handler = new SequenceMessageHandler ( )
259
259
{
260
260
Responses =
261
261
{
@@ -303,7 +303,7 @@ public async Task AddTransientHttpErrorPolicy_AddsPolicyHandler_HandlesStatusCod
303
303
public async Task AddTransientHttpErrorPolicy_AddsPolicyHandler_HandlesHttpRequestException ( )
304
304
{
305
305
// Arrange
306
- var handler = new SequenceMessageHandler ( )
306
+ using var handler = new SequenceMessageHandler ( )
307
307
{
308
308
Responses =
309
309
{
@@ -415,6 +415,59 @@ public async Task AddPolicyHandlerFromRegistry_PolicySelectorWithKey_AddsPolicyH
415
415
Assert . True ( registry . ContainsKey ( "host2" ) ) ;
416
416
}
417
417
418
+ [ Fact ]
419
+ public async Task AddPolicyHandlerFromRegistry_WithConfigureDelegate_AddsPolicyHandler ( )
420
+ {
421
+ var options = new PollyPolicyOptions ( )
422
+ {
423
+ PolicyName = "retrypolicy"
424
+ } ;
425
+
426
+ var serviceCollection = new ServiceCollection ( ) ;
427
+
428
+ serviceCollection . AddSingleton ( options ) ;
429
+
430
+ serviceCollection . AddPolicyRegistry ( ( serviceProvider , registry ) =>
431
+ {
432
+ string policyName = serviceProvider . GetRequiredService < PollyPolicyOptions > ( ) . PolicyName ;
433
+
434
+ registry . Add < IAsyncPolicy < HttpResponseMessage > > ( policyName , RetryPolicy ) ;
435
+ } ) ;
436
+
437
+ HttpMessageHandlerBuilder builder = null ;
438
+
439
+ // Act1
440
+ serviceCollection . AddHttpClient ( "example.com" , c => c . BaseAddress = new Uri ( "http://example.com" ) )
441
+ . AddPolicyHandlerFromRegistry ( options . PolicyName )
442
+ . ConfigureHttpMessageHandlerBuilder ( b =>
443
+ {
444
+ b . PrimaryHandler = PrimaryHandler ;
445
+
446
+ builder = b ;
447
+ } ) ;
448
+
449
+ var services = serviceCollection . BuildServiceProvider ( ) ;
450
+ var factory = services . GetRequiredService < IHttpClientFactory > ( ) ;
451
+
452
+ // Act2
453
+ var client = factory . CreateClient ( "example.com" ) ;
454
+
455
+ // Assert
456
+ Assert . NotNull ( client ) ;
457
+
458
+ Assert . Collection (
459
+ builder . AdditionalHandlers ,
460
+ h => Assert . IsType < LoggingScopeHttpMessageHandler > ( h ) ,
461
+ h => Assert . IsType < PolicyHttpMessageHandler > ( h ) ,
462
+ h => Assert . IsType < LoggingHttpMessageHandler > ( h ) ) ;
463
+
464
+ // Act 3
465
+ var response = await client . SendAsync ( new HttpRequestMessage ( ) ) ;
466
+
467
+ // Assert
468
+ Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
469
+ }
470
+
418
471
// Throws an exception or fails on even numbered requests, otherwise succeeds.
419
472
private class FaultyMessageHandler : DelegatingHandler
420
473
{
@@ -447,5 +500,10 @@ protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage reques
447
500
return Task . FromResult ( func ( request ) ) ;
448
501
}
449
502
}
503
+
504
+ private class PollyPolicyOptions
505
+ {
506
+ public string PolicyName { get ; set ; }
507
+ }
450
508
}
451
509
}
0 commit comments