diff --git a/src/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs b/src/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs index f672738f..28551fee 100755 --- a/src/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs +++ b/src/Enyim.Caching/Configuration/MemcachedClientConfiguration.cs @@ -17,11 +17,13 @@ namespace Enyim.Caching.Configuration /// public class MemcachedClientConfiguration : IMemcachedClientConfiguration { - // these are lazy initialized in the getters + private readonly bool _useLegacyNodeLocator; + private readonly ILogger _logger; + private Type _nodeLocator; private ITranscoder _transcoder; private IMemcachedKeyTransformer _keyTransformer; - private ILogger _logger; + /// /// Initializes a new instance of the class. @@ -153,18 +155,10 @@ public MemcachedClientConfiguration( _logger.LogDebug($"Use KeyTransformer Type : '{keyTransformer}'"); } + _useLegacyNodeLocator = options.UseLegacyNodeLocator; if (NodeLocator == null) { - if (options.Servers.Count > 1) - { - NodeLocator = options.UseLegacyNodeLocator ? typeof(LegacyNodeLocator) : typeof(DefaultNodeLocator); - } - else - { - NodeLocator = typeof(SingleNodeLocator); - } - - _logger.LogDebug($"Use NodeLocator: {NodeLocator}"); + SetNodeLocator(); } if (!string.IsNullOrEmpty(options.Transcoder)) @@ -217,7 +211,7 @@ private void ConfigureServers(MemcachedClientOptions options) { if (IPAddress.TryParse(server.Address, out var address)) { - Servers.Add(new IPEndPoint(address, server.Port)); + AddServer(address, server.Port); } else { @@ -229,6 +223,20 @@ private void ConfigureServers(MemcachedClientOptions options) } } + private void SetNodeLocator() + { + if (Servers.Count > 1) + { + NodeLocator = _useLegacyNodeLocator ? typeof(LegacyNodeLocator) : typeof(DefaultNodeLocator); + } + else + { + NodeLocator = typeof(SingleNodeLocator); + } + + _logger.LogDebug("Use NodeLocator: {NodeLocator}", NodeLocator); + } + /// /// Adds a new server to the pool. /// @@ -236,16 +244,29 @@ private void ConfigureServers(MemcachedClientOptions options) public void AddServer(string address) { Servers.Add(ConfigurationHelper.ResolveToEndPoint(address)); + SetNodeLocator(); } /// /// Adds a new server to the pool. /// - /// The host name or IP address of the server. + /// The host name. /// The port number of the memcached instance. public void AddServer(string host, int port) { Servers.Add(new DnsEndPoint(host, port)); + SetNodeLocator(); + } + + /// + /// Adds a new server to the pool. + /// + /// The IP address of the server. + /// The port number of the memcached instance. + public void AddServer(IPAddress ip, int port) + { + Servers.Add(new IPEndPoint(ip, port)); + SetNodeLocator(); } ///