RegistryPipelineComponentBuilder<TBuilder, TKey>
class RegistryPipelineComponentBuilder<TBuilder, TKey> where TBuilder : ResiliencePipelineBuilderBase
Builds a PipelineComponent used by the registry.
using Polly.Telemetry;
using Polly.Utils.Pipeline;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
namespace Polly.Registry
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
internal class RegistryPipelineComponentBuilder<[System.Runtime.CompilerServices.Nullable(0)] TBuilder, TKey> where TBuilder : ResiliencePipelineBuilderBase
{
[System.Runtime.CompilerServices.Nullable(0)]
private class Builder : IEquatable<Builder>
{
[CompilerGenerated]
protected virtual Type EqualityContract {
[CompilerGenerated]
get {
return typeof(Builder);
}
}
public Func<PipelineComponent> ComponentFactory { get; set; }
public List<CancellationToken> ReloadTokens { get; set; }
public ResilienceStrategyTelemetry Telemetry { get; set; }
public TBuilder Instance { get; set; }
public Builder(Func<PipelineComponent> ComponentFactory, List<CancellationToken> ReloadTokens, ResilienceStrategyTelemetry Telemetry, TBuilder Instance)
{
ComponentFactory = ComponentFactory;
ReloadTokens = ReloadTokens;
Telemetry = Telemetry;
Instance = Instance;
base..ctor();
}
[CompilerGenerated]
public override string ToString()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("Builder");
stringBuilder.Append(" { ");
if (PrintMembers(stringBuilder))
stringBuilder.Append(' ');
stringBuilder.Append('}');
return stringBuilder.ToString();
}
[CompilerGenerated]
protected virtual bool PrintMembers(StringBuilder builder)
{
RuntimeHelpers.EnsureSufficientExecutionStack();
builder.Append("ComponentFactory = ");
builder.Append(ComponentFactory);
builder.Append(", ReloadTokens = ");
builder.Append(ReloadTokens);
builder.Append(", Telemetry = ");
builder.Append(Telemetry);
builder.Append(", Instance = ");
builder.Append(Instance);
return true;
}
public static bool operator !=([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
0
})] Builder left, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
0
})] Builder right)
{
return !(left == right);
}
public static bool operator ==([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
0
})] Builder left, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
0
})] Builder 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<PipelineComponent>>.Default.GetHashCode(ComponentFactory)) * -1521134295 + EqualityComparer<List<CancellationToken>>.Default.GetHashCode(ReloadTokens)) * -1521134295 + EqualityComparer<ResilienceStrategyTelemetry>.Default.GetHashCode(Telemetry)) * -1521134295 + EqualityComparer<TBuilder>.Default.GetHashCode(Instance);
}
[System.Runtime.CompilerServices.NullableContext(2)]
[CompilerGenerated]
public override bool Equals(object obj)
{
return Equals(obj as Builder);
}
[CompilerGenerated]
public virtual bool Equals([System.Runtime.CompilerServices.Nullable(new byte[] {
2,
0,
0
})] Builder other)
{
if ((object)this != other) {
if ((object)other != null && EqualityContract == other.EqualityContract && EqualityComparer<Func<PipelineComponent>>.Default.Equals(ComponentFactory, other.ComponentFactory) && EqualityComparer<List<CancellationToken>>.Default.Equals(ReloadTokens, other.ReloadTokens) && EqualityComparer<ResilienceStrategyTelemetry>.Default.Equals(Telemetry, other.Telemetry))
return EqualityComparer<TBuilder>.Default.Equals(Instance, other.Instance);
return false;
}
return true;
}
[CompilerGenerated]
protected Builder([System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
0
})] Builder original)
{
ComponentFactory = original.ComponentFactory;
ReloadTokens = original.ReloadTokens;
Telemetry = original.Telemetry;
Instance = original.Instance;
}
[CompilerGenerated]
public void Deconstruct(out Func<PipelineComponent> ComponentFactory, out List<CancellationToken> ReloadTokens, out ResilienceStrategyTelemetry Telemetry, out TBuilder Instance)
{
ComponentFactory = this.ComponentFactory;
ReloadTokens = this.ReloadTokens;
Telemetry = this.Telemetry;
Instance = this.Instance;
}
}
private readonly Func<TBuilder> _activator;
private readonly TKey _key;
private readonly string _builderName;
[System.Runtime.CompilerServices.Nullable(2)]
private readonly string _instanceName;
private readonly Action<TBuilder, ConfigureBuilderContext<TKey>> _configure;
public RegistryPipelineComponentBuilder(Func<TBuilder> activator, TKey key, string builderName, [System.Runtime.CompilerServices.Nullable(2)] string instanceName, Action<TBuilder, ConfigureBuilderContext<TKey>> configure)
{
_activator = activator;
_key = key;
_builderName = builderName;
_instanceName = instanceName;
_configure = configure;
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
2,
1
})]
internal (ResilienceContextPool contextPool, PipelineComponent component) CreateComponent()
{
Builder builder = CreateBuilder();
PipelineComponent pipelineComponent = builder.ComponentFactory();
if (builder.ReloadTokens.Count == 0)
return (builder.Instance.ContextPool, pipelineComponent);
pipelineComponent = PipelineComponentFactory.CreateReloadable(new ReloadableComponent.Entry(pipelineComponent, builder.ReloadTokens, builder.Telemetry), delegate {
Builder builder2 = CreateBuilder();
return new ReloadableComponent.Entry(builder2.ComponentFactory(), builder2.ReloadTokens, builder2.Telemetry);
});
return (builder.Instance.ContextPool, pipelineComponent);
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
1,
0,
0
})]
private Builder CreateBuilder()
{
ConfigureBuilderContext<TKey> context = new ConfigureBuilderContext<TKey>(_key, _builderName, _instanceName);
TBuilder builder = _activator();
builder.Name = _builderName;
builder.InstanceName = _instanceName;
_configure(builder, context);
TimeProvider timeProvider = builder.TimeProviderInternal;
ResilienceStrategyTelemetry telemetry = new ResilienceStrategyTelemetry(new ResilienceTelemetrySource(builder.Name, builder.InstanceName, null), builder.TelemetryListener);
return new Builder(() => PipelineComponentFactory.WithExecutionTracking(PipelineComponentFactory.WithDisposableCallbacks(builder.BuildPipelineComponent(), context.DisposeCallbacks), timeProvider), context.ReloadTokens, telemetry, builder);
}
}
}