예제 #1
0
        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);
        }
예제 #2
0
 public IEnumerable <PropertyDescriptor> Select(PropertyWriterArgs args)
 {
     yield return(new TestDescriptor(
                      nameof(Target.Value),
                      typeof(string),
                      () => throw _exception
                      ));
 }