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); }
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); } }
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); } }
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); }