ValueInjecter Null值

时间:2015-08-06 16:31:05

标签: c# valueinjecter

我在AutoMapper上使用ValueInjector(3.x),但我有一些问题。

首先,我不明白UnflatLoopInjectionFlatLoopInjection之间的区别。

此外,我想设置复杂类型的值。

Class Product {
   public string Id { get; set; } 
   public string Name { get; set; } 
   public Category Category { get; set; }
}

Class ProductDTO {
   public string Name { get; set; } 
   public Category Category { get; set; }
}

var product = repository.Get(id);
product.InjectFrom(dto);

问题是我的product.Category已经有一些带有值的属性,并且使用InjectFrom值注入器将product.Category替换为dto.Category,替换整个类别,甚至替换为null

由于

1 个答案:

答案 0 :(得分:3)

当你从

出发时,

展平

Foo1.Foo2.Foo1.Name to Foo1Foo2Foo1Name

反其道而行之

我知道你想避免在source属性为Null时注入

为此你可以创建这样的注射:

public class AvoidNullProps : LoopInjection
{
    protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp)
    {
        var val = sp.GetValue(source);
        if(val != null)
        tp.SetValue(target, val);
    }
}

并使用它 res.InjectFrom<AvoidNullProps>(src);

你也可以使用Mapper:

 Mapper.AddMap<ProductDTO, Product>(dto =>
            { 
                var res = new Product();
                res.Id = dto.Id;
                res.Name = dto.Name;
                if(dto.Category != null && dto.Category.Id != null) 
                   res.Category = Mapper.Map<Category>(dto.Category);

                return res;
            });

  var product = Mapper.Map<Product>(dto);