Skip to content

Commit 2de8fc0

Browse files
authored
Allow adding generic strategies to generic builder (#1386)
1 parent a5007c1 commit 2de8fc0

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/Polly.Core/ResilienceStrategyBuilderExtensions.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,23 @@ public static TBuilder AddStrategy<TBuilder>(this TBuilder builder, ResilienceSt
2525
return builder.AddStrategy(_ => strategy, EmptyOptions.Instance);
2626
}
2727

28+
/// <summary>
29+
/// Adds an already created strategy instance to the builder.
30+
/// </summary>
31+
/// <typeparam name="TResult">The type of the result.</typeparam>
32+
/// <param name="builder">The builder instance.</param>
33+
/// <param name="strategy">The strategy instance.</param>
34+
/// <returns>The same builder instance.</returns>
35+
/// <exception cref="ArgumentNullException">Thrown when <paramref name="strategy"/> is null.</exception>
36+
/// <exception cref="InvalidOperationException">Thrown when this builder was already used to create a strategy. The builder cannot be modified after it has been used.</exception>
37+
public static ResilienceStrategyBuilder<TResult> AddStrategy<TResult>(this ResilienceStrategyBuilder<TResult> builder, ResilienceStrategy<TResult> strategy)
38+
{
39+
Guard.NotNull(builder);
40+
Guard.NotNull(strategy);
41+
42+
return builder.AddStrategy(strategy.Strategy);
43+
}
44+
2845
/// <summary>
2946
/// Adds a strategy to the builder.
3047
/// </summary>

test/Polly.Core.Tests/GenericResilienceStrategyBuilderTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,19 @@ public void Build_Ok()
5151
strategy.Should().NotBeNull();
5252
strategy.Strategy.Should().BeOfType<ResilienceStrategyPipeline>().Subject.Strategies.Should().HaveCount(2);
5353
}
54+
55+
[Fact]
56+
public void AddGenericStrategy_Ok()
57+
{
58+
// arrange
59+
var testStrategy = new ResilienceStrategy<string>(new TestResilienceStrategy());
60+
_builder.AddStrategy(testStrategy);
61+
62+
// act
63+
var strategy = _builder.Build();
64+
65+
// assert
66+
strategy.Should().NotBeNull();
67+
strategy.Strategy.Should().Be(testStrategy.Strategy);
68+
}
5469
}

0 commit comments

Comments
 (0)