Ejemplo n.º 1
0
            public Task <IValueProvider> BindAsync(TBindingData value, ValueBindingContext context)
            {
                object         converted = _converter.Convert(value);
                IValueProvider provider  = new ObjectValueProvider(converted, typeof(string));

                return(Task.FromResult(provider));
            }
        public void ApplyTo(T obj, ObjectValueProvider valueProvider)
        {
            ArrayValueProvider values;

            if (!valueProvider.TryGetValue(_property.Property.Name, out values))
            {
                return;
            }

            var elements = new Dictionary <TKey, TValue>();

            for (int i = 0;; i++)
            {
                ArrayValueProvider elementArray;
                if (!values.TryGetValue(i, out elementArray))
                {
                    break;
                }

                TKey elementKey;
                if (elementArray.TryGetValue(0, out elementKey))
                {
                    TValue elementValue = default(TValue);
                    ObjectValueProvider elementValueProvider;
                    if (elementArray.TryGetValue(1, out elementValueProvider))
                    {
                        elementValue = (TValue)_valueConverter.GetObject(elementValueProvider);
                    }

                    elements[elementKey] = elementValue;
                }
            }

            _property.Set(obj, elements);
        }
        public void ApplyTo(T obj, ObjectValueProvider valueProvider)
        {
            ArrayValueProvider values;

            if (!valueProvider.TryGetValue(_property.Property.Name, out values))
            {
                return;
            }

            var elements = new List <TElement>();

            for (int i = 0;; i++)
            {
                ObjectValueProvider elementValueProvider;
                if (!values.TryGetValue(i, out elementValueProvider))
                {
                    break;
                }

                var element = (TElement)_converter.GetObject(elementValueProvider);
                elements.Add(element);
            }

            _property.Set(obj, elements);
        }
Ejemplo n.º 4
0
        public void CtorTest()
        {
            var actual = new ObjectValueProvider(new TestModel());

            actual.Should()
            .NotBeNull();
        }
Ejemplo n.º 5
0
        public void GetValueInvalidExpressionTest()
        {
            var model  = InstanceCreator.CreateInstance <TestModel>();
            var target = new ObjectValueProvider(model);

            Action test = () => target.GetValue("DOESNotExist");

            test.ShouldThrow <FormatException>();
        }
Ejemplo n.º 6
0
        public void GetValueTest3()
        {
            var model  = InstanceCreator.CreateInstance <TestModel>();
            var target = new ObjectValueProvider(model);

            var actual = target.GetValue("MyStringArray[0]");

            actual.Should()
            .Be(model.MyStringArray[0]);
        }
Ejemplo n.º 7
0
        public void GetValueTest2()
        {
            var model  = InstanceCreator.CreateInstance <TestModel>();
            var target = new ObjectValueProvider(model);

            var actual = target.GetValue("MyDouble");

            actual.Should()
            .Be(model.MyDouble.ToString(CultureInfo.InvariantCulture));
        }
Ejemplo n.º 8
0
        public void GetValueTest1()
        {
            var model  = InstanceCreator.CreateInstance <TestModel>();
            var target = new ObjectValueProvider(model);

            var actual = target.GetValue("MyInt32");

            actual.Should()
            .Be(model.MyInt32.ToString());
        }
Ejemplo n.º 9
0
        public void ApplyTo(T obj, ObjectValueProvider valueProvider)
        {
            object value;

            if (valueProvider.TryGetValue(_property.Property.Name, out value))
            {
                var nullableValue = (TValue?)value;
                _property.Set(obj, nullableValue);
            }
        }
        public object GetObject(ObjectValueProvider valueProvider)
        {
            var implementation = new TImplementation();

            for (int i = 0; i < _converters.Length; i++)
            {
                _converters[i].ApplyTo(implementation, valueProvider);
            }

            return(implementation);
        }
Ejemplo n.º 11
0
        public void ApplyTo(T obj, ObjectValueProvider valueProvider)
        {
            ObjectValueProvider propertyProvider;

            if (valueProvider.TryGetValue(_property.Property.Name, out propertyProvider))
            {
                object propertyObj = _converter.GetObject(propertyProvider);

                _property.Set(obj, propertyObj);
            }
        }
Ejemplo n.º 12
0
        public void GetValueTest10()
        {
            var model  = InstanceCreator.CreateInstance <TestModel>();
            var target = new ObjectValueProvider(model);

            var actual = target.GetValue("SubModel.MyDictionaryStringSub[" + model.SubModel.MyDictionaryStringSub.First()
                                         .Key + "]");

            actual.Should()
            .Be(model.SubModel.MyDictionaryStringSub[model.SubModel.MyDictionaryStringSub.First()
                                                     .Key]);
        }
Ejemplo n.º 13
0
        public void GetValueTest6()
        {
            var model = new TestModel
            {
                MyListInt = new List <Int32>
                {
                    RandomValueEx.GetRandomInt32(),
                RandomValueEx.GetRandomInt32(),
                RandomValueEx.GetRandomInt32()
                }
            };
            var target = new ObjectValueProvider(model);

            var actual = target.GetValue("MyListInt[0]");

            actual.Should()
            .Be(model.MyListInt[0]
                .ToString());
        }
Ejemplo n.º 14
0
        public void ApplyTo(T obj, ObjectValueProvider valueProvider)
        {
            ArrayValueProvider values;

            if (!valueProvider.TryGetValue(_property.Property.Name, out values))
            {
                return;
            }

            var elements = new List <TElement>();

            for (int i = 0;; i++)
            {
                TElement element;
                if (!values.TryGetValue(i, out element))
                {
                    break;
                }

                elements.Add(element);
            }

            _property.Set(obj, elements.ToArray());
        }
            public Task <ITriggerData> BindAsync(object value, ValueBindingContext context)
            {
                WebhookTriggerData data = (WebhookTriggerData)value;
                var bindingData         = new Dictionary <string, object>();

                bindingData[AuthName] = GetTokenFromGraphClientAsync(data.client);

                JObject raw = data.Payload;
                object  userObject;

                if (_parameter.ParameterType == typeof(string)) //Non-.NET language case
                {
                    userObject = JsonConvert.SerializeObject(raw, Formatting.Indented);
                }
                else
                {
                    userObject = raw.ToObject(_parameter.ParameterType);
                }

                IValueProvider valueProvider = new ObjectValueProvider(userObject);
                var            triggerData   = new TriggerData(valueProvider, bindingData);

                return(Task.FromResult <ITriggerData>(triggerData));
            }
            private Task <IValueProvider> Bind(object value)
            {
                var valueProvider = new ObjectValueProvider(value, _type);

                return(Task.FromResult <IValueProvider>(valueProvider));
            }
        async Task <ITriggerData> ITriggerBinding.BindAsync(object value, ValueBindingContext context)
        {
            HttpContext requestContext  = (HttpContext)value;
            Stream      inputStream     = requestContext.Request.Body;
            Type        destinationType = this.parameter.ParameterType;

            var bindingData = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

            object convertedValue;

            if (inputStream == null)
            {
                convertedValue = this.parameter.DefaultValue;
            }
            else if (destinationType.IsAssignableFrom(inputStream.GetType()))
            {
                // Give them the request stream directly - no buffering
                convertedValue = inputStream;
            }
            else if (destinationType.IsAssignableFrom(typeof(byte[])))
            {
                // Copy the stream into a simple byte array with the help of MemoryStream
                using (var buffer = new MemoryStream((int?)requestContext.Request.ContentLength ?? 4096))
                    using (inputStream)
                    {
                        await inputStream.CopyToAsync(buffer);

                        convertedValue = buffer.ToArray();
                    }
            }
            else
            {
                // Binding to JToken or some derivative like JObject or JArray.
                // This also works for primitives like int, bool, and string.
                JToken jsonValue;
                using (var reader = new JsonTextReader(new StreamReader(inputStream)))
                {
                    jsonValue = await JToken.ReadFromAsync(reader, context.CancellationToken);
                }

                if (destinationType.IsAssignableFrom(jsonValue.GetType()))
                {
                    convertedValue = jsonValue;
                }
                else if (destinationType == typeof(string) && jsonValue.Type != JTokenType.String)
                {
                    // Special case for out-of-proc workers (like nodejs). The binding type
                    // appears to always be "string" so we need to do a special conversion.
                    convertedValue = jsonValue.ToString(Formatting.None);
                }
                else
                {
                    // At this point, we're probably dealing with a POCO
                    convertedValue = this.ConvertFromJson(jsonValue, destinationType);
                }
            }

            // Support for basic expression binding
            bindingData[this.parameter.Name] = convertedValue;

            var valueProvider = new ObjectValueProvider(convertedValue, destinationType);

            return(new TriggerData(valueProvider, bindingData)
            {
                ReturnValueProvider = new HttpContextReturnValueBinder(requestContext, destinationType),
            });
        }