<PackageReference Include="Polly.Core" Version="8.0.0-alpha.3" />

ResilienceStrategyBuilderBase

public abstract class ResilienceStrategyBuilderBase
A builder that is used to create an instance of ResilienceStrategy.
using Polly.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Text; namespace Polly { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public abstract class ResilienceStrategyBuilderBase { [System.Runtime.CompilerServices.Nullable(0)] private sealed class Entry : IEquatable<Entry> { [CompilerGenerated] private Type EqualityContract { [CompilerGenerated] get { return typeof(Entry); } } public Func<ResilienceStrategyBuilderContext, ResilienceStrategy> Factory { get; set; } public ResilienceStrategyOptions Properties { get; set; } public Entry(Func<ResilienceStrategyBuilderContext, ResilienceStrategy> Factory, ResilienceStrategyOptions Properties) { Factory = Factory; Properties = Properties; 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(", Properties = "); builder.Append(Properties); 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<ResilienceStrategyBuilderContext, ResilienceStrategy>>.Default.GetHashCode(Factory)) * -1521134295 + EqualityComparer<ResilienceStrategyOptions>.Default.GetHashCode(Properties); } [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<ResilienceStrategyBuilderContext, ResilienceStrategy>>.Default.Equals(Factory, other.Factory)) return EqualityComparer<ResilienceStrategyOptions>.Default.Equals(Properties, other.Properties); return false; } return true; } [CompilerGenerated] private Entry(Entry original) { Factory = original.Factory; Properties = original.Properties; } [CompilerGenerated] public void Deconstruct(out Func<ResilienceStrategyBuilderContext, ResilienceStrategy> Factory, out ResilienceStrategyOptions Properties) { Factory = this.Factory; Properties = this.Properties; } } private readonly List<Entry> _entries = new List<Entry>(); private bool _used; [System.Runtime.CompilerServices.Nullable(2)] [field: System.Runtime.CompilerServices.Nullable(2)] public string BuilderName { [System.Runtime.CompilerServices.NullableContext(2)] get; [System.Runtime.CompilerServices.NullableContext(2)] set; } public ResilienceProperties Properties { get; } = new ResilienceProperties(); [Required] internal TimeProvider TimeProvider { get; set; } = TimeProvider.System; [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] [EditorBrowsable(EditorBrowsableState.Never)] [field: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] public Action<IList<ResilienceStrategy>> OnCreatingStrategy { [return: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] get; [param: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] set; } [System.Runtime.CompilerServices.Nullable(2)] [EditorBrowsable(EditorBrowsableState.Never)] [field: System.Runtime.CompilerServices.Nullable(2)] public DiagnosticSource DiagnosticSource { [System.Runtime.CompilerServices.NullableContext(2)] get; [System.Runtime.CompilerServices.NullableContext(2)] set; } [EditorBrowsable(EditorBrowsableState.Never)] [Required] public Func<double> Randomizer { get; set; } = RandomUtil.Instance.NextDouble; internal abstract bool IsGenericBuilder { get; } private protected ResilienceStrategyBuilderBase() { } private protected ResilienceStrategyBuilderBase(ResilienceStrategyBuilderBase other) { BuilderName = other.BuilderName; Properties = other.Properties; TimeProvider = other.TimeProvider; OnCreatingStrategy = other.OnCreatingStrategy; Randomizer = other.Randomizer; DiagnosticSource = other.DiagnosticSource; } internal void AddStrategyCore(Func<ResilienceStrategyBuilderContext, ResilienceStrategy> factory, ResilienceStrategyOptions options) { Guard.NotNull(factory, "factory"); Guard.NotNull(options, "options"); ValidationHelper.ValidateObject(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 strategy once."); _entries.Add(new Entry(factory, options)); } internal ResilienceStrategy BuildStrategy() { ValidationHelper.ValidateObject(this, "The 'ResilienceStrategyBuilder' configuration is invalid."); _used = true; List<ResilienceStrategy> list = _entries.Select(CreateResilienceStrategy).ToList(); OnCreatingStrategy?.Invoke(list); if (list.Count == 0) return NullResilienceStrategy.Instance; if (list.Count == 1) return list[0]; return ResilienceStrategyPipeline.CreatePipeline(list); } private ResilienceStrategy CreateResilienceStrategy(Entry entry) { ResilienceStrategyBuilderContext arg = new ResilienceStrategyBuilderContext(BuilderName, Properties, entry.Properties.StrategyName, entry.Properties.StrategyType, TimeProvider, IsGenericBuilder, DiagnosticSource, Randomizer); return entry.Factory(arg); } } }