Пример #1
0
        public bool TryGetHeaderInitializer <TProperty>(PropertyInfo propertyInfo, out IHeaderInitializer <TMessage, TInput> initializer)
        {
            var propertyName = propertyInfo?.Name ?? throw new ArgumentNullException(nameof(propertyInfo));

            // headers use a double underscore prefix
            var key = new StringBuilder(propertyName.Length + 2).Append("__").Append(propertyName).ToString();

            if (typeof(TValue) == typeof(TProperty))
            {
                initializer = new DictionaryCopyHeaderInitializer <TMessage, TInput, TValue>(propertyInfo, key);
                return(true);
            }

            if (_providerFactory.TryGetPropertyConverter(out IPropertyConverter <TProperty, TValue> converter))
            {
                var providerType = typeof(InputDictionaryPropertyProvider <,>).MakeGenericType(typeof(TInput), typeof(TValue));

                var provider = (IPropertyProvider <TInput, TValue>)Activator.CreateInstance(providerType, propertyName);

                var convertProvider = new PropertyConverterPropertyProvider <TInput, TProperty, TValue>(converter, provider);

                initializer = new ProviderHeaderInitializer <TMessage, TInput, TProperty>(convertProvider, propertyInfo);
                return(true);
            }

            initializer = default;
            return(false);
        }
Пример #2
0
        public void Apply(ITransformConfigurator <TInput> configurator)
        {
            if (_transformConfigurator.TryGetConverter(out var converter))
            {
                var inputPropertyProvider = new InputPropertyProvider <TInput, TProperty>(_property);

                var provider = new PropertyConverterPropertyProvider <TInput, TProperty, TProperty>(converter, inputPropertyProvider);

                configurator.Transform(_property, provider);
            }
        }
        public void Apply(ITransformConfigurator <TInput> configurator)
        {
            if (_transformConfigurator.TryGetConverter(out var converter))
            {
                var inputPropertyProvider = new InputPropertyProvider <TInput, TProperty>(_property);

                var dictionaryConverter = new DictionaryPropertyConverter <TKey, TValue, TValue>(converter) as IPropertyConverter <TProperty, TProperty>;

                var provider = new PropertyConverterPropertyProvider <TInput, TProperty, TProperty>(dictionaryConverter, inputPropertyProvider);

                configurator.Set(_property, provider);
            }
        }
Пример #4
0
        public void Apply(ITransformConfigurator <TInput> configurator)
        {
            if (_transformConfigurator.TryGetConverter(out var converter))
            {
                var inputPropertyProvider = new InputPropertyProvider <TInput, TProperty>(_property);

                IPropertyConverter <TProperty, TProperty> arrayConverter = typeof(TProperty).IsArray
                    ? new ArrayPropertyConverter <TElement, TElement>(converter) as IPropertyConverter <TProperty, TProperty>
                    : new ListPropertyConverter <TElement, TElement>(converter) as IPropertyConverter <TProperty, TProperty>;

                var provider = new PropertyConverterPropertyProvider <TInput, TProperty, TProperty>(arrayConverter, inputPropertyProvider);

                configurator.Transform(_property, provider);
            }
        }
Пример #5
0
        public bool TryGetPropertyInitializer <TProperty>(PropertyInfo propertyInfo, out IPropertyInitializer <TMessage, TInput> initializer)
        {
            var key = propertyInfo?.Name ?? throw new ArgumentNullException(nameof(propertyInfo));

            if (typeof(TValue) == typeof(TProperty))
            {
                initializer = new DictionaryCopyPropertyInitializer <TMessage, TInput, TValue>(propertyInfo, key);
                return(true);
            }

            if (_providerFactory.TryGetPropertyConverter(out IPropertyConverter <TProperty, TValue> converter))
            {
                var providerType = typeof(InputDictionaryPropertyProvider <,>).MakeGenericType(typeof(TInput), typeof(TValue));

                var provider = (IPropertyProvider <TInput, TValue>)Activator.CreateInstance(providerType, key);

                var convertProvider = new PropertyConverterPropertyProvider <TInput, TProperty, TValue>(converter, provider);

                initializer = new ProviderPropertyInitializer <TMessage, TInput, TProperty>(convertProvider, propertyInfo);
                return(true);
            }

            if (typeof(TValue) == typeof(object))
            {
                var inputProviderType = typeof(InputDictionaryPropertyProvider <,>).MakeGenericType(typeof(TInput), typeof(TValue));

                var valueProvider = (IPropertyProvider <TInput, TValue>)Activator.CreateInstance(inputProviderType, key);

                var providerType = typeof(ObjectPropertyProvider <,>).MakeGenericType(typeof(TInput), typeof(TProperty));

                var provider = (IPropertyProvider <TInput, TProperty>)Activator.CreateInstance(providerType, _providerFactory, valueProvider);

                initializer = new ProviderPropertyInitializer <TMessage, TInput, TProperty>(provider, propertyInfo);
                return(true);
            }

            initializer = null;
            return(false);
        }