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 string inputPropertyName = new StringBuilder(propertyName.Length + 2).Append("__").Append(propertyName).ToString(); if (_inputProperties.TryGetValue(inputPropertyName, out var inputPropertyInfo)) { var propertyType = typeof(TProperty); var inputPropertyType = inputPropertyInfo.PropertyType; // exactly the same type, we just copy it over unmodified if (inputPropertyType == propertyType) { initializer = new CopyHeaderInitializer <TMessage, TInput, TProperty>(propertyInfo, inputPropertyInfo); return(true); } if (_providerFactory.TryGetPropertyProvider(inputPropertyInfo, out IPropertyProvider <TInput, TProperty> provider)) { initializer = new ProviderHeaderInitializer <TMessage, TInput, TProperty>(provider, propertyInfo); return(true); } } initializer = default; return(false); }
public bool TryGetHeadersInitializer <TProperty>(PropertyInfo propertyInfo, out IHeaderInitializer <TMessage, TInput> initializer) { if (propertyInfo.Name.StartsWith("__Header_") && propertyInfo.Name.Length > 9) { string headerName = propertyInfo.Name.Substring(9).Replace("__", " ").Replace("_", "-").Replace(" ", "_"); var inputPropertyType = propertyInfo.PropertyType; // exactly the same type, we just copy it over unmodified if (inputPropertyType == typeof(string)) { initializer = new SetStringHeaderInitializer <TMessage, TInput>(headerName, propertyInfo); return(true); } if (_providerFactory.TryGetPropertyProvider(propertyInfo, out IPropertyProvider <TInput, TProperty> provider)) { var type = typeof(SetHeaderInitializer <, ,>).MakeGenericType(typeof(TMessage), typeof(TInput), inputPropertyType); initializer = (IHeaderInitializer <TMessage, TInput>)Activator.CreateInstance(type, headerName, provider); return(true); } } initializer = default; return(false); }
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 bool TryGetHeaderInitializer <TProperty>(string propertyName, out IHeaderInitializer <TMessage, TInput> initializer) { // headers use a double underscore prefix string inputPropertyName = new StringBuilder(propertyName.Length + 2).Append("__").Append(propertyName).ToString(); var inputPropertyInfo = typeof(TInput).GetProperty(inputPropertyName); if (inputPropertyInfo != null) { var propertyType = typeof(TProperty); var inputPropertyType = inputPropertyInfo.PropertyType; // exactly the same type, we just copy it over unmodified if (inputPropertyType == propertyType) { initializer = new CopyHeaderInitializer <TMessage, TInput, TProperty>(propertyName, inputPropertyName); return(true); } if (PropertyInitializerCache.TryGetFactory <TProperty>(inputPropertyType, out var propertyConverter)) { initializer = propertyConverter.CreateHeaderInitializer <TMessage, TInput>(propertyName, inputPropertyName); return(true); } } initializer = default; return(false); }
public HeaderAdapter(IHeaderInitializer <TMessage> initializer) { _initializer = initializer; }
public void Add(IHeaderInitializer <TMessage, TInput> initializer) { _headerInitializers.Add(initializer); }
public void Add(IHeaderInitializer <TMessage> initializer) { _headerInitializers.Add(new HeaderAdapter(initializer)); }
public bool TryGetHeadersInitializer <TProperty>(PropertyInfo propertyInfo, out IHeaderInitializer <TMessage, TInput> initializer) { initializer = default; return(false); }
public bool TryGetHeadersInitializer <TInput, TProperty>(PropertyInfo propertyInfo, out IHeaderInitializer <TMessage, TInput> initializer) where TInput : class { return(_typeCache.GetOrAdd <TInput, IInitializerConvention <TMessage, TInput> >().TryGetHeadersInitializer <TProperty>(propertyInfo, out initializer)); }
bool IInitializerConvention.TryGetHeaderInitializer <T, TInput, TProperty>(PropertyInfo propertyInfo, out IHeaderInitializer <T, TInput> initializer) { if (this is IInitializerConvention <T, TInput> convention) { return(convention.TryGetHeaderInitializer <TProperty>(propertyInfo, out initializer)); } initializer = default; return(false); }
public bool TryGetHeaderInitializer <TInput>(string propertyName, out IHeaderInitializer <TMessage, TInput> initializer) where TInput : class { return(_typeCache.GetOrAdd <TInput, IInitializerConvention <TMessage, TInput> >().TryGetHeaderInitializer(propertyName, out initializer)); }