首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueInjecter零值

ValueInjecter零值
EN

Stack Overflow用户
提问于 2015-08-06 16:31:05
回答 1查看 768关注 0票数 1

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

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

另外,我希望在复杂类型中设置值。

代码语言:javascript
复制
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.Categorydto.Category,替换整个类别,甚至替换为null

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-07 12:37:37

扁平化是指你从

Foo1.Foo2.Foo1.Name to Foo1Foo2Foo1Name

反其道而行

我知道,当源属性为Null时,您希望避免注入

为此,您可以创建如下所示的注射:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31861142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档