<PackageReference Include="Polly.Core" Version="8.5.1" />

ResiliencePipelineBuilderBase

public abstract class ResiliencePipelineBuilderBase
A builder that is used to create an instance of ResiliencePipeline.
using Polly.Telemetry; using Polly.Utils; using Polly.Utils.Pipeline; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Text; namespace Polly { [System.Runtime.CompilerServices.NullableContext(2)] [System.Runtime.CompilerServices.Nullable(0)] public abstract class ResiliencePipelineBuilderBase { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] private sealed class Entry : IEquatable<Entry> { [CompilerGenerated] private Type EqualityContract { [CompilerGenerated] get { return typeof(Entry); } } public Func<StrategyBuilderContext, PipelineComponent> Factory { get; set; } public ResilienceStrategyOptions Options { get; set; } public Entry(Func<StrategyBuilderContext, PipelineComponent> Factory, ResilienceStrategyOptions Options) { Factory = Factory; Options = Options; base..ctor(); } [CompilerGenerated] public override string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("Entry"); stringBuilder.Append(" { "); if (PrintMembers(stringBuilder)) stringBuilder.Append(' '); stringBuilder.Append('}'); return stringBuilder.ToString(); } [CompilerGenerated] private bool PrintMembers(StringBuilder builder) { RuntimeHelpers.EnsureSufficientExecutionStack(); builder.Append("Factory = "); builder.Append(Factory); builder.Append(", Options = "); builder.Append(Options); return true; } public static bool operator !=(Entry left, Entry right) { return !(left == right); } public static bool operator ==(Entry left, Entry right) { if ((object)left != right) return left?.Equals(right) ?? false; return true; } [CompilerGenerated] public override int GetHashCode() { return (EqualityComparer<Type>.Default.GetHashCode(EqualityContract) * -1521134295 + EqualityComparer<Func<StrategyBuilderContext, PipelineComponent>>.Default.GetHashCode(Factory)) * -1521134295 + EqualityComparer<ResilienceStrategyOptions>.Default.GetHashCode(Options); } [System.Runtime.CompilerServices.NullableContext(2)] [CompilerGenerated] public override bool Equals(object obj) { return Equals(obj as Entry); } [System.Runtime.CompilerServices.NullableContext(2)] [CompilerGenerated] public bool Equals(Entry other) { if ((object)this != other) { if ((object)other != null && EqualityContract == other.EqualityContract && EqualityComparer<Func<StrategyBuilderContext, PipelineComponent>>.Default.Equals(Factory, other.Factory)) return EqualityComparer<ResilienceStrategyOptions>.Default.Equals(Options, other.Options); return false; } return true; } [CompilerGenerated] private Entry(Entry original) { Factory = original.Factory; Options = original.Options; } [CompilerGenerated] public void Deconstruct(out Func<StrategyBuilderContext, PipelineComponent> Factory, out ResilienceStrategyOptions Options) { Factory = this.Factory; Options = this.Options; } } [System.Runtime.CompilerServices.Nullable(1)] private readonly List<Entry> _entries = new List<Entry>(); private bool _used; public string Name { get; set; } public string InstanceName { get; set; } public ResilienceContextPool ContextPool { get; set; } public TimeProvider TimeProvider { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] public TelemetryListener TelemetryListener { get; set; } [System.Runtime.CompilerServices.Nullable(1)] internal TimeProvider TimeProviderInternal { [System.Runtime.CompilerServices.NullableContext(1)] get { return TimeProvider ?? TimeProvider.get_System(); } } [System.Runtime.CompilerServices.Nullable(1)] [field: System.Runtime.CompilerServices.Nullable(1)] internal Action<ResilienceValidationContext> Validator { [System.Runtime.CompilerServices.NullableContext(1)] get; [System.Runtime.CompilerServices.NullableContext(1)] private protected set; } = ValidationHelper.ValidateObject; private protected ResiliencePipelineBuilderBase() { } [System.Runtime.CompilerServices.NullableContext(1)] private protected ResiliencePipelineBuilderBase(ResiliencePipelineBuilderBase other) { Name = other.Name; TimeProvider = other.TimeProvider; TelemetryListener = other.TelemetryListener; } [System.Runtime.CompilerServices.NullableContext(1)] [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("This call validates the options using the data annotations attributes.\r\nMake sure that the options are included by adding the '[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(OptionsType))]' attribute to the calling method.")] internal void AddPipelineComponent(Func<StrategyBuilderContext, PipelineComponent> factory, ResilienceStrategyOptions options) { Guard.NotNull(factory, "factory"); Guard.NotNull(options, "options"); Validator(new ResilienceValidationContext(options, "The '" + TypeNameFormatter.Format(options.GetType()) + "' are invalid.")); if (_used) throw new InvalidOperationException("Cannot add any more resilience strategies to the builder after it has been used to build a pipeline once."); _entries.Add(new Entry(factory, options)); } [System.Runtime.CompilerServices.NullableContext(1)] internal PipelineComponent BuildPipelineComponent() { Validator(new ResilienceValidationContext(this, "The 'ResiliencePipelineBuilder' configuration is invalid.")); _used = true; List<PipelineComponent> list = _entries.Select(CreateComponent).ToList(); if (list.Count == 0) return PipelineComponent.Empty; ResilienceTelemetrySource source = new ResilienceTelemetrySource(Name, InstanceName, null); return PipelineComponentFactory.CreateComposite(list, new ResilienceStrategyTelemetry(source, TelemetryListener), TimeProviderInternal); } [System.Runtime.CompilerServices.NullableContext(1)] private PipelineComponent CreateComponent(Entry entry) { StrategyBuilderContext arg = new StrategyBuilderContext(new ResilienceStrategyTelemetry(new ResilienceTelemetrySource(Name, InstanceName, entry.Options.Name), TelemetryListener), TimeProviderInternal); PipelineComponent pipelineComponent = entry.Factory(arg); pipelineComponent.Options = entry.Options; return pipelineComponent; } } }