Automapper 动态解析器
Automapper Dynamic Resolver's
我正在尝试在自动映射器之上创建一个抽象层,使用户能够动态地向他们映射的每个 属性 添加自定义规则。
给定模型
public class Entity
{
public int Index { get; set; }
}
public class DTO
{
public int Count { get; set; }
}
我们可以像这样配置 Automapper 来映射实体:
//sorry this is pseudo coded
cfg.CreateMap<Entity, DTO>()
.ForMember(dest => dest.Index,
opt => opt.ResolveUsing<IndexResolver>());
public class IndexResolver: ValueResolver<DTO, int>,
{
protected override string ResolveCore(DTO source)
{
return source.Count - 1;
}
}
这是有效的,因为我们将规则映射到值解析器,但是如果我想在 运行 时间创建规则是可能的。我希望能够像这样配置:
cfg.CreateMap<Entity, DTO>()
.ForMember(dest => dest.Index,
opt => opt.Resolver(d => d.Count - 1);
有没有一种方法可以添加带有表达式的解析器,这样我就不需要从 ValueResolver 继承?
我的第一个想法是创建一个在其构造函数中采用表达式的通用自定义解析器。然后你应该能够做到:
.ResolveUsing(new LambdaResolver(d => d.Count - 1))
我正在尝试在自动映射器之上创建一个抽象层,使用户能够动态地向他们映射的每个 属性 添加自定义规则。
给定模型
public class Entity
{
public int Index { get; set; }
}
public class DTO
{
public int Count { get; set; }
}
我们可以像这样配置 Automapper 来映射实体:
//sorry this is pseudo coded
cfg.CreateMap<Entity, DTO>()
.ForMember(dest => dest.Index,
opt => opt.ResolveUsing<IndexResolver>());
public class IndexResolver: ValueResolver<DTO, int>,
{
protected override string ResolveCore(DTO source)
{
return source.Count - 1;
}
}
这是有效的,因为我们将规则映射到值解析器,但是如果我想在 运行 时间创建规则是可能的。我希望能够像这样配置:
cfg.CreateMap<Entity, DTO>()
.ForMember(dest => dest.Index,
opt => opt.Resolver(d => d.Count - 1);
有没有一种方法可以添加带有表达式的解析器,这样我就不需要从 ValueResolver 继承?
我的第一个想法是创建一个在其构造函数中采用表达式的通用自定义解析器。然后你应该能够做到:
.ResolveUsing(new LambdaResolver(d => d.Count - 1))