ValueInjecter 空值
ValueInjecter Null Values
我正在使用 ValueInjector(3.x) 而不是 AutoMapper,但我有一些问题。
首先,我不明白UnflatLoopInjection
和FlatLoopInjection
之间的区别。
另外我想设置复杂类型的值。
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
.
谢谢
扁平化是从
Foo1.Foo2.Foo1.Name to Foo1Foo2Foo1Name
以相反的方式展开
我了解到您想在源 属性 为 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.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);
我正在使用 ValueInjector(3.x) 而不是 AutoMapper,但我有一些问题。
首先,我不明白UnflatLoopInjection
和FlatLoopInjection
之间的区别。
另外我想设置复杂类型的值。
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
.
谢谢
扁平化是从
Foo1.Foo2.Foo1.Name to Foo1Foo2Foo1Name
以相反的方式展开
我了解到您想在源 属性 为 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.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);