@@ -12,18 +12,36 @@ public class StaticConnectionPool : IConnectionPool
1212 private readonly Func < Node , float > _nodeScorer ;
1313
1414 public StaticConnectionPool ( IEnumerable < Uri > uris , bool randomize = true , IDateTimeProvider dateTimeProvider = null )
15- : this ( uris . Select ( uri => new Node ( uri ) ) , randomize , dateTimeProvider ) { }
15+ : this ( uris . Select ( uri => new Node ( uri ) ) , randomize , null , dateTimeProvider ) { }
1616
1717 public StaticConnectionPool ( IEnumerable < Node > nodes , bool randomize = true , IDateTimeProvider dateTimeProvider = null )
18- : this ( nodes , null , randomize , dateTimeProvider ) { }
18+ : this ( nodes , randomize , null , dateTimeProvider ) { }
1919
20+ protected StaticConnectionPool ( IEnumerable < Node > nodes , bool randomize , int ? randomizeSeed = null , IDateTimeProvider dateTimeProvider = null )
21+ {
22+ Randomize = randomize ;
23+ Random = ! randomize || ! randomizeSeed . HasValue
24+ ? new Random ( )
25+ : new Random ( randomizeSeed . Value ) ;
26+
27+ Initialize ( nodes , dateTimeProvider ) ;
28+ }
2029 //this constructor is protected because nodeScorer only makes sense on subclasses that support reseeding
2130 //otherwise just manually sort `nodes` before instantiating.
22- protected StaticConnectionPool ( IEnumerable < Node > nodes , Func < Node , float > nodeScorer = null , bool randomize = true , IDateTimeProvider dateTimeProvider = null )
31+ protected StaticConnectionPool ( IEnumerable < Node > nodes , Func < Node , float > nodeScorer = null , IDateTimeProvider dateTimeProvider = null )
2332 {
24- nodes . ThrowIfEmpty ( nameof ( nodes ) ) ;
33+ _nodeScorer = nodeScorer ;
34+ Initialize ( nodes , dateTimeProvider ) ;
35+ }
36+
37+ private void Initialize ( IEnumerable < Node > nodes , IDateTimeProvider dateTimeProvider )
38+ {
39+ var nodesProvided = nodes ? . ToList ( ) ?? throw new ArgumentNullException ( nameof ( nodes ) ) ;
40+ nodesProvided . ThrowIfEmpty ( nameof ( nodes ) ) ;
41+ DateTimeProvider = dateTimeProvider ?? Net . DateTimeProvider . Default ;
42+
2543 string scheme = null ;
26- foreach ( var node in nodes )
44+ foreach ( var node in nodesProvided )
2745 {
2846 if ( scheme == null )
2947 {
@@ -34,10 +52,7 @@ protected StaticConnectionPool(IEnumerable<Node> nodes, Func<Node, float> nodeSc
3452 throw new ArgumentException ( "Trying to instantiate a connection pool with mixed URI Schemes" ) ;
3553 }
3654
37- DateTimeProvider = dateTimeProvider ?? Net . DateTimeProvider . Default ;
38- Randomize = randomize ;
39- _nodeScorer = nodeScorer ;
40- InternalNodes = SortNodes ( nodes )
55+ InternalNodes = SortNodes ( nodesProvided )
4156 . DistinctBy ( n => n . Uri )
4257 . ToList ( ) ;
4358 LastUpdate = DateTimeProvider . Now ( ) ;
@@ -62,7 +77,7 @@ protected StaticConnectionPool(IEnumerable<Node> nodes, Func<Node, float> nodeSc
6277 public virtual bool SupportsReseeding => false ;
6378
6479 /// <inheritdoc />
65- public bool UsingSsl { get ; }
80+ public bool UsingSsl { get ; private set ; }
6681
6782 protected List < Node > AliveNodes
6883 {
@@ -75,10 +90,10 @@ protected List<Node> AliveNodes
7590 }
7691 }
7792
78- protected IDateTimeProvider DateTimeProvider { get ; }
93+ protected IDateTimeProvider DateTimeProvider { get ; private set ; }
7994
8095 protected List < Node > InternalNodes { get ; set ; }
81- protected Random Random { get ; } = new Random ( ) ;
96+ protected Random Random { get ; }
8297 protected bool Randomize { get ; }
8398
8499 /// <summary>
0 commit comments