Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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.");
        }