@@ -12,18 +12,36 @@ public class StaticConnectionPool : IConnectionPool
12
12
private readonly Func < Node , float > _nodeScorer ;
13
13
14
14
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 ) { }
16
16
17
17
public StaticConnectionPool ( IEnumerable < Node > nodes , bool randomize = true , IDateTimeProvider dateTimeProvider = null )
18
- : this ( nodes , null , randomize , dateTimeProvider ) { }
18
+ : this ( nodes , randomize , null , dateTimeProvider ) { }
19
19
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
+ }
20
29
//this constructor is protected because nodeScorer only makes sense on subclasses that support reseeding
21
30
//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 )
23
32
{
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
+
25
43
string scheme = null ;
26
- foreach ( var node in nodes )
44
+ foreach ( var node in nodesProvided )
27
45
{
28
46
if ( scheme == null )
29
47
{
@@ -34,10 +52,7 @@ protected StaticConnectionPool(IEnumerable<Node> nodes, Func<Node, float> nodeSc
34
52
throw new ArgumentException ( "Trying to instantiate a connection pool with mixed URI Schemes" ) ;
35
53
}
36
54
37
- DateTimeProvider = dateTimeProvider ?? Net . DateTimeProvider . Default ;
38
- Randomize = randomize ;
39
- _nodeScorer = nodeScorer ;
40
- InternalNodes = SortNodes ( nodes )
55
+ InternalNodes = SortNodes ( nodesProvided )
41
56
. DistinctBy ( n => n . Uri )
42
57
. ToList ( ) ;
43
58
LastUpdate = DateTimeProvider . Now ( ) ;
@@ -62,7 +77,7 @@ protected StaticConnectionPool(IEnumerable<Node> nodes, Func<Node, float> nodeSc
62
77
public virtual bool SupportsReseeding => false ;
63
78
64
79
/// <inheritdoc />
65
- public bool UsingSsl { get ; }
80
+ public bool UsingSsl { get ; private set ; }
66
81
67
82
protected List < Node > AliveNodes
68
83
{
@@ -75,10 +90,10 @@ protected List<Node> AliveNodes
75
90
}
76
91
}
77
92
78
- protected IDateTimeProvider DateTimeProvider { get ; }
93
+ protected IDateTimeProvider DateTimeProvider { get ; private set ; }
79
94
80
95
protected List < Node > InternalNodes { get ; set ; }
81
- protected Random Random { get ; } = new Random ( ) ;
96
+ protected Random Random { get ; }
82
97
protected bool Randomize { get ; }
83
98
84
99
/// <summary>
0 commit comments