private ZooKeeperClient(CuratorFramework curator, ILog log, ConnectionStringRandomizer connectionStringRandomizer)
        {
            this.connectionStringRandomizer = connectionStringRandomizer;
            Curator = curator;
            Curator.getConnectionStateListenable()
            .addListener(
                new ConnectionListener(
                    state =>
            {
                RandomizeConnectionStringIfNeeded(state);

                if (ConnectionStateChanged != null)
                {
                    ConnectionStateChanged(state);
                }
            })
                );

            baseLog = log;
            Log     = log.ForContext("ZK");
            InterceptLogger();

            watcherWrappers = new ConcurrentDictionary <IWatcher, WatcherWrapper>(new ReferenceEqualityComparer <IWatcher>());
        }