ClientPipelineOptions
Options that control the creation of a ClientPipeline used
by a service client to send and receive HTTP messages.
Service clients must create a client-specific subtype of this class
to pass to their constructors to allow for service-specific options
with a client-wide scope.
using System.ClientModel.Internal;
using System.Runtime.CompilerServices;
namespace System.ClientModel.Primitives
{
[System.Runtime.CompilerServices.NullableContext(2)]
[System.Runtime.CompilerServices.Nullable(0)]
public class ClientPipelineOptions
{
[System.Runtime.CompilerServices.Nullable(1)]
private static readonly ClientPipelineOptions _defaultOptions = new ClientPipelineOptions();
private bool _frozen;
private PipelinePolicy _retryPolicy;
private PipelineTransport _transport;
private TimeSpan? _timeout;
[System.Runtime.CompilerServices.Nullable(1)]
internal static ClientPipelineOptions Default {
[System.Runtime.CompilerServices.NullableContext(1)]
get {
return _defaultOptions;
}
}
public PipelinePolicy RetryPolicy {
get {
return _retryPolicy;
}
set {
AssertNotFrozen();
_retryPolicy = value;
}
}
public PipelineTransport Transport {
get {
return _transport;
}
set {
AssertNotFrozen();
_transport = value;
}
}
public TimeSpan? NetworkTimeout {
get {
return _timeout;
}
set {
AssertNotFrozen();
_timeout = value;
}
}
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
internal PipelinePolicy[] PerCallPolicies {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
set;
}
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
internal PipelinePolicy[] PerTryPolicies {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
set;
}
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
[field: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
internal PipelinePolicy[] BeforeTransportPolicies {
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
get;
[param: System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})]
set;
}
[System.Runtime.CompilerServices.NullableContext(1)]
public void AddPolicy(PipelinePolicy policy, PipelinePosition position)
{
Argument.AssertNotNull(policy, "policy");
AssertNotFrozen();
switch (position) {
case PipelinePosition.PerCall:
PerCallPolicies = AddPolicy(policy, PerCallPolicies);
break;
case PipelinePosition.PerTry:
PerTryPolicies = AddPolicy(policy, PerTryPolicies);
break;
case PipelinePosition.BeforeTransport:
BeforeTransportPolicies = AddPolicy(policy, BeforeTransportPolicies);
break;
default:
throw new ArgumentException($"""{position}""");
}
}
[System.Runtime.CompilerServices.NullableContext(1)]
internal static PipelinePolicy[] AddPolicy(PipelinePolicy policy, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1
})] PipelinePolicy[] policies)
{
if (policies == null)
policies = new PipelinePolicy[1];
else {
PipelinePolicy[] array = new PipelinePolicy[policies.Length + 1];
policies.CopyTo(array.AsSpan());
policies = array;
}
policies[policies.Length - 1] = policy;
return policies;
}
public virtual void Freeze()
{
_frozen = true;
}
protected void AssertNotFrozen()
{
if (_frozen)
throw new InvalidOperationException("Cannot change a ClientPipelineOptions instance after it has been used to create a ClientPipeline.");
}
}
}