public void Populate <T>(T target) { LogPopulationStart(target); var writerArgs = new PropertyWriterArgs(_options.WriteLog, target.GetType()); var properties = new FallbackPropertyWriter(_options.PropertyWriters) .Select(writerArgs) .ToArray(); _options.WriteLog( "Selected {count} properties to populate: {properties}", properties.Length, properties.Select(p => p.Name)); foreach (var property in properties) { var value = _conversionProcess.Convert( property, _converterSelector.Select(property), _valueSelector.Select(property)); try { property.Assign(target, value); } catch (TargetInvocationException e) { throw e.InnerException ?? e; } } _validator.Validate(_valueSelector); _validator.Validate(target); }
public IEnumerable <PropertyDescriptor> Select(PropertyWriterArgs args) { yield return(new TestDescriptor( nameof(Target.Value), typeof(string), () => throw _exception )); }