Also going back to @loudej 's comment about Options being more like a model: "used by everyone simultaneously", instead of the options itself returning different values.  Could the options instead just contain the logical ConnectionStringName, and something else which is a MultiTennant aware resolve the actual value: ConnectionStringResolver.Resolve(Options.ConnectionString)?