Пример #1
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);
        }
Пример #2
0
 public ObjectConverter(IPropertyProviderFactory <TInput> factory)
 {
     factory.TryGetPropertyConverter(out _converter);
 }