|
1 | 1 | using System.ComponentModel.DataAnnotations; |
2 | 2 | using System.Diagnostics.CodeAnalysis; |
3 | | -using Polly.Telemetry; |
4 | 3 | using Polly.Utils.Pipeline; |
5 | 4 |
|
6 | 5 | namespace Polly.Registry; |
@@ -124,15 +123,17 @@ public ResiliencePipeline GetOrAddPipeline(TKey key, Action<ResiliencePipelineBu |
124 | 123 | return pipeline; |
125 | 124 | } |
126 | 125 |
|
127 | | - var context = new ConfigureBuilderContext<TKey>(key, _builderNameFormatter(key), _instanceNameFormatter?.Invoke(key)); |
128 | | - |
129 | | - return _pipelines.GetOrAdd(key, static (_, factory) => |
| 126 | + return _pipelines.GetOrAdd(key, k => |
130 | 127 | { |
131 | | - var component = CreatePipelineComponent(factory.instance._activator, factory.context, factory.configure); |
| 128 | + var component = new RegistryPipelineComponentBuilder<ResiliencePipelineBuilder, TKey>( |
| 129 | + _activator, |
| 130 | + k, |
| 131 | + _builderNameFormatter(k), |
| 132 | + _instanceNameFormatter?.Invoke(k), |
| 133 | + configure).CreateComponent(); |
132 | 134 |
|
133 | 135 | return new ResiliencePipeline(component, DisposeBehavior.Reject); |
134 | | - }, |
135 | | - (instance: this, context, configure)); |
| 136 | + }); |
136 | 137 | } |
137 | 138 |
|
138 | 139 | /// <summary> |
@@ -260,36 +261,6 @@ public async ValueTask DisposeAsync() |
260 | 261 | } |
261 | 262 | } |
262 | 263 |
|
263 | | - private static PipelineComponent CreatePipelineComponent<TBuilder>( |
264 | | - Func<TBuilder> activator, |
265 | | - ConfigureBuilderContext<TKey> context, |
266 | | - Action<TBuilder, ConfigureBuilderContext<TKey>> configure) |
267 | | - where TBuilder : ResiliencePipelineBuilderBase |
268 | | - { |
269 | | - Func<TBuilder> factory = () => |
270 | | - { |
271 | | - var builder = activator(); |
272 | | - builder.Name = context.BuilderName; |
273 | | - builder.InstanceName = context.BuilderInstanceName; |
274 | | - configure(builder, context); |
275 | | - |
276 | | - return builder; |
277 | | - }; |
278 | | - |
279 | | - var builder = factory(); |
280 | | - var pipeline = builder.BuildPipelineComponent(); |
281 | | - var telemetry = new ResilienceStrategyTelemetry( |
282 | | - new ResilienceTelemetrySource(context.BuilderName, context.BuilderInstanceName, null), |
283 | | - builder.TelemetryListener); |
284 | | - |
285 | | - if (context.ReloadTokenProducer is null) |
286 | | - { |
287 | | - return pipeline; |
288 | | - } |
289 | | - |
290 | | - return PipelineComponentFactory.CreateReloadable(pipeline, context.ReloadTokenProducer(), () => factory().BuildPipelineComponent(), telemetry); |
291 | | - } |
292 | | - |
293 | 264 | private GenericRegistry<TResult> GetGenericRegistry<TResult>() |
294 | 265 | { |
295 | 266 | if (_genericRegistry.TryGetValue(typeof(TResult), out var genericRegistry)) |
|
0 commit comments