我有一个程序集,其中包含一个类,它将对象从Dal实体映射到Business对象。此类映射一些不同的对象(配置文件,地址等)。我正在用TinyMapper替换手绘地图。一般来说:
1.列表映射方法
public IEnumerable<TTarget> MapFromDal(IEnumerable<TSource> source){
return source.Select(MapSingleFromDal);
}
2.单个对象映射方法
public TTarget MapSingleFromDal(TSource source){
//By hand mapping code.
}
在用TinyMapper替换映射代码时,我应该在哪里放置我的Bind语句?经常打电话很贵吗? 我第一次尝试将此行放在MapSingleFromDal方法中:
TinyMapper.Bind<TTarget, TSource>();
因此每次映射单个对象时都会调用它。这感觉不对,所以我想知道在哪里放。它应该在这个类的构造函数中吗?它映射了很多对象,所以我应该像这样在构造函数中堆叠调用吗?
TinyMapper.Bind<T1,S1>();
TinyMapper.Bind<T2,S2>();
TinyMapper.Bind<T3,S3>();
当我再次致电TinyMapper.Bind<T1,S1>();
时会发生什么?这很贵吗?
答案 0 :(得分:3)
TinyMapper.Bind<TTarget, TSource>()
生成映射代码,即查找所有字段,属性然后创建IL代码,最后使用适当的映射方法创建对象。所以,是的,它很贵。
尝试只拨打TinyMapper.Bind
一次。 Composition Root是注册所有绑定的好地方。
另一种选择:如果您的Target
和Source
类型很简单,即您不使用任何忽略或特殊映射。您只拨打TinyMapper.Bind<TTarget, TSource>()
,因此根本无法致电Bind
并致电Map
。在这种简单的情况下,Map
调用Bind
并且只调用一次。