AutoMapper官方文档(十三)【值转换器,Null替换,Map行为前后】

值转换器

值转换器对另一种类型应用额外的转换。 在分配值之前,AutoMapper将检查要设置的值是否有任何相关的值转换,并在设置之前应用它们。

您可以创建几个不同级别的值转换器:

    Globally
    Profile
    Map
    Member
Mapper.Initialize(cfg => {
    cfg.ValueTransformers.Add<string>(val + "!!!");
});

var source = new Source { Value = "Hello" };
var dest = Mapper.Map<Dest>(source);

dest.Value.ShouldBe("Hello!!!");

Null替换

空替换允许您为目标成员提供一个备用值(如果源成员链中的任何位置为null)。 这意味着,不是从null映射,而是从您提供的值映射。

var config = new MapperConfiguration(cfg => cfg.CreateMap<Source, Dest>()
    .ForMember(destination => destination.Value, opt => opt.NullSubstitute("Other Value")));

var source = new Source { Value = null };
var mapper = config.CreateMapper();
var dest = mapper.Map<Source, Dest>(source);

dest.Value.ShouldEqual("Other Value");

source.Value = "Not null";

dest = mapper.Map<Source, Dest>(source);

dest.Value.ShouldEqual("Not null");

假设替代者是源成员类型,并且会在到达目标类型之后经过任何映射/转换。


Map行为前后

偶尔,您可能需要在映射发生之前或之后执行自定义逻辑。 这应该是一个罕见的事情,因为在AutoMapper之外完成这项工作更为明显。 您可以创建全局映射之前/之后的操作:

Mapper.Initialize(cfg => {
  cfg.CreateMap<Source, Dest>()
    .BeforeMap((src, dest) => src.Value = src.Value + 10)
    .AfterMap((src, dest) => dest.Name = "John");
});

或者,您可以在映射期间创建映射之前/之后的回调:

int i = 10;
Mapper.Map<Source, Dest>(src, opt => {
    opt.BeforeMap((src, dest) => src.Value = src.Value + i);
    opt.AfterMap((src, dest) => dest.Name = HttpContext.Current.Identity.Name);
});

当您需要映射操作之前/之后的上下文信息时,后一种配置很有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值