public void TryFindSetting_CanFindSettingByName() { var provider1 = Mock.Create <ISettingProvider>(); var provider2 = Mock.Create <ISettingProvider>(); var provider3 = Mock.Create <ISettingProvider>(); provider1 .Arrange(x => x.Read(Arg.IsAny <SelectQuery>())) .Returns(default(ISetting)); provider2 .Arrange(x => x.Read(Arg.Matches <SelectQuery>(arg => arg.SettingName == SettingName.Parse("Type.Member")))) .Returns(Setting.Create("Type.Member", "abc")); provider3 .Arrange(x => x.Read(Arg.IsAny <SelectQuery>())) .Returns(default(ISetting)); var settingFound = FirstSettingFinder.TryFindSetting ( new SelectQuery(SettingName.Parse("Type.Member"), typeof(string)), new[] { provider1, provider2, provider3 }, out var result ); Assert.IsTrue(settingFound); Assert.AreSame(provider2, result.SettingProvider); Assert.AreEqual("abc", result.Setting.Value); }
public object GetValue(SelectQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } query.ProviderName = _settingProviderNames.TryGetValue(query.SettingName, out var providerName) ? providerName : query.ProviderName; try { if (_settingFinder.TryFindSetting(query, _providers, out var result)) { CacheProvider(query.SettingName, result.SettingProvider.Name); return(result.Setting.Value); } } catch (Exception ex) { throw ($"{nameof(GetValue)}", $"Could not get value for {query.SettingName.ToString().QuoteWith("'")}. See the inner exception for details.", ex).ToDynamicException(); } throw ("SettingNotFound", $"Setting {query.SettingName.ToString().QuoteWith("'")} not found.").ToDynamicException(); }