public void TemperatureConverterTest() { var converterCache = new ValueConverterCache<TemperatureUnit>((k) => new TemperatureConverter(k.From, k.To)); Assert.AreEqual(32, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(0)); Assert.AreEqual(33.8, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(1)); Assert.AreEqual(89.6, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(32)); Assert.AreEqual(212, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(100)); Assert.AreEqual(-17.7777778, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(0), 0.00000005); Assert.AreEqual(0, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(32), 0.0000000001); Assert.AreEqual(1, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(33.8), 0.0000000001); Assert.AreEqual(32, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(89.6), 0.0000000001); Assert.AreEqual(100, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(212), 0.0000000001); }
public void TemperatureConverterTest() { var converterCache = new ValueConverterCache <TemperatureUnit>((k) => new TemperatureConverter(k.From, k.To)); Assert.AreEqual(32, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(0)); Assert.AreEqual(33.8, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(1)); Assert.AreEqual(89.6, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(32)); Assert.AreEqual(212, converterCache.Get(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit).Convert(100)); Assert.AreEqual(-17.7777778, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(0), 0.00000005); Assert.AreEqual(0, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(32), 0.0000000001); Assert.AreEqual(1, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(33.8), 0.0000000001); Assert.AreEqual(32, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(89.6), 0.0000000001); Assert.AreEqual(100, converterCache.Get(TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius).Convert(212), 0.0000000001); }
public override object ProvideValue(IServiceProvider serviceProvider) { if (serviceProvider == null) { throw new ArgumentNullException(nameof(serviceProvider)); } var target = serviceProvider.GetService <IProvideValueTarget>() ?? throw new InvalidOperationException("There is no ProvideValueTarget service in the service provider."); var targetProperty = target.TargetProperty; Type propertyType; if (targetProperty is PropertyInfo property) { propertyType = property.PropertyType; } else if (targetProperty is DependencyProperty dependencyProperty) { propertyType = dependencyProperty.PropertyType; } else { throw new InvalidOperationException("Cannot obtain the property type."); } if (propertyType.IsAssignableTo <IValueConverter>()) { return(ValueConverterCache.GetValueConverter(Type)); } if (propertyType.IsAssignableTo <IMultiValueConverter>()) { return(ValueConverterCache.GetMultiValueConverter(Type)); } throw new InvalidOperationException("The type of property must implement a value converter interface."); }