/// <summary>
        /// Creates a Bucket specific <see cref="IConfigInfo"/> instance.
        /// </summary>
        /// <param name="bucketConfig">The <see cref="IBucketConfig"/> to use for client configuration.</param>
        /// <returns></returns>
        IConfigInfo CreateConfigInfo(IBucketConfig bucketConfig)
        {
            IConfigInfo configInfo;

            switch (bucketConfig.NodeLocator.ToEnum <NodeLocatorEnum>())
            {
            case NodeLocatorEnum.VBucket:
                configInfo = new CouchbaseConfigContext(bucketConfig,
                                                        ClientConfig,
                                                        IOServiceFactory,
                                                        ConnectionPoolFactory,
                                                        SaslFactory,
                                                        Transcoder);
                break;

            case NodeLocatorEnum.Ketama:
                configInfo = new MemcachedConfigContext(bucketConfig,
                                                        ClientConfig,
                                                        IOServiceFactory,
                                                        ConnectionPoolFactory,
                                                        SaslFactory,
                                                        Transcoder);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            configInfo.LoadConfig();
            return(configInfo);
        }
        /// <summary>
        /// Creates a Bucket specific <see cref="IConfigInfo"/> instance.
        /// </summary>
        /// <param name="bucketConfig">The <see cref="IBucketConfig"/> to use for client configuration.</param>
        /// <returns></returns>
        IConfigInfo CreateConfigInfo(IBucketConfig bucketConfig)
        {
            IConfigInfo configInfo;
            switch (bucketConfig.NodeLocator.ToEnum<NodeLocatorEnum>())
            {
                case NodeLocatorEnum.VBucket:
                    configInfo = new CouchbaseConfigContext(bucketConfig,
                        ClientConfig,
                        IOServiceFactory,
                        ConnectionPoolFactory,
                        SaslFactory,
                        Transcoder, _loggerFactory);
                    break;
                case NodeLocatorEnum.Ketama:
                    configInfo = new MemcachedConfigContext(bucketConfig,
                        ClientConfig,
                        IOServiceFactory,
                        ConnectionPoolFactory,
                        SaslFactory,
                        Transcoder, _loggerFactory);
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            configInfo.LoadConfig();
            return configInfo;
        }
        /// <summary>
        /// Creates a Bucket specific <see cref="IConfigInfo"/> instance.
        /// </summary>
        /// <param name="bucketConfig">The <see cref="IBucketConfig"/> to use for client configuration.</param>
        /// <returns></returns>
        IConfigInfo CreateConfigInfo(IBucketConfig bucketConfig)
        {
            lock (SyncObj)
            {
                IConfigInfo configInfo;
                switch (bucketConfig.NodeLocator.ToEnum<NodeLocatorEnum>())
                {
                    case NodeLocatorEnum.VBucket:
                        configInfo = new CouchbaseConfigContext(bucketConfig,
                            ClientConfig,
                            IOStrategyFactory,
                            ConnectionPoolFactory,
                            SaslFactory,
                            Converter,
                            Serializer);
                        break;
                    case NodeLocatorEnum.Ketama:
                        configInfo = new MemcachedConfigContext(bucketConfig,
                            ClientConfig,
                            IOStrategyFactory,
                            ConnectionPoolFactory,
                            SaslFactory,
                            Converter,
                            Serializer);
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

                configInfo.LoadConfig();
                return configInfo;
            }
        }