public override object this[string keyword]
{
get
{
if (keyword == null) { throw new ArgumentNullException("keyword"); }
return base[__canonicalKeywords[keyword.ToLower()]];
}
set
{
if (keyword == null) { throw new ArgumentNullException("keyword"); }
ReadPreference readPreference;
switch (keyword.ToLower())
{
case "connect":
if (value is string)
{
ConnectionMode = (ConnectionMode)Enum.Parse(typeof(ConnectionMode), (string)value, true); // ignoreCase
}
else
{
ConnectionMode = (ConnectionMode)value;
}
break;
case "connecttimeout":
case "connecttimeoutms":
ConnectTimeout = ToTimeSpan(keyword, value);
break;
case "database":
DatabaseName = (string)value;
break;
case "fsync":
FSync = Convert.ToBoolean(value);
break;
case "guids":
case "uuidrepresentation":
GuidRepresentation = (GuidRepresentation)Enum.Parse(typeof(GuidRepresentation), (string)value, true); // ignoreCase
break;
case "ipv6":
IPv6 = Convert.ToBoolean(value);
break;
case "j":
case "journal":
Journal = Convert.ToBoolean(value);
break;
case "maxidletime":
case "maxidletimems":
MaxConnectionIdleTime = ToTimeSpan(keyword, value);
break;
case "maxlifetime":
case "maxlifetimems":
MaxConnectionLifeTime = ToTimeSpan(keyword, value);
break;
case "maxpoolsize":
MaxConnectionPoolSize = Convert.ToInt32(value);
break;
case "minpoolsize":
MinConnectionPoolSize = Convert.ToInt32(value);
break;
case "password":
Password = (string)value;
break;
case "readpreference":
readPreference = _readPreference ?? new ReadPreference();
if (value is string)
{
readPreference.ReadPreferenceMode = (ReadPreferenceMode)Enum.Parse(typeof(ReadPreferenceMode), (string)value, true); // ignoreCase
}
else
{
readPreference.ReadPreferenceMode = (ReadPreferenceMode)value;
}
ReadPreference = readPreference;
break;
case "readpreferencetags":
readPreference = _readPreference ?? new ReadPreference();
if (value is string)
{
readPreference.TagSets = ParseReplicaSetTagSets((string)value);
}
else
{
readPreference.TagSets = (IEnumerable<ReplicaSetTagSet>)value;
}
ReadPreference = readPreference;
break;
case "replicaset":
ReplicaSetName = (string)value;
break;
case "safe":
var safe = Convert.ToBoolean(value);
if (_w == null)
{
W = safe ? 1 : 0;
}
else
{
if (safe)
{
// don't overwrite existing W value unless it's 0
var wCount = _w as WriteConcern.WCount;
if (wCount != null && wCount.Value == 0)
{
W = 1;
}
}
else
{
W = 0;
}
}
break;
case "secondaryacceptablelatency":
case "secondaryacceptablelatencyms":
SecondaryAcceptableLatency = ToTimeSpan(keyword, value);
break;
case "server":
case "servers":
Servers = ParseServersString((string)value);
break;
case "slaveok":
#pragma warning disable 618
SlaveOk = Convert.ToBoolean(value);
#pragma warning restore
break;
case "sockettimeout":
case "sockettimeoutms":
SocketTimeout = ToTimeSpan(keyword, value);
break;
case "ssl":
UseSsl = Convert.ToBoolean(value);
break;
case "sslverifycertificate":
VerifySslCertificate = Convert.ToBoolean(value);
break;
case "username":
Username = (string)value;
break;
case "w":
if (IsIntegerType(value))
{
W = new WriteConcern.WCount(Convert.ToInt32(value));
}
else if (value is string)
{
W = WriteConcern.WValue.Parse((string)value);
}
else
{
W = (WriteConcern.WValue)value;
}
break;
case "waitqueuemultiple":
WaitQueueMultiple = Convert.ToDouble(value);
break;
case "waitqueuesize":
WaitQueueSize = Convert.ToInt32(value);
break;
case "waitqueuetimeout":
case "waitqueuetimeoutms":
WaitQueueTimeout = ToTimeSpan(keyword, value);
break;
case "wtimeout":
case "wtimeoutms":
WTimeout = ToTimeSpan(keyword, value);
break;
default:
var message = string.Format("Invalid keyword '{0}'.", keyword);
throw new ArgumentException(message);
}
}
}