TinyMapper:调用TinyMapper.Bind <ttarget,tsource =“”>();导致性能问题?应该只调用一次吗?

时间:2015-11-04 00:02:48

标签: c# tinymapper

我有一个程序集,其中包含一个类,它将对象从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>();时会发生什么?这很贵吗?

1 个答案:

答案 0 :(得分:3)

TinyMapper.Bind<TTarget, TSource>()生成映射代码,即查找所有字段,属性然后创建IL代码,最后使用适当的映射方法创建对象。所以,是的,它很贵。

尝试只拨打TinyMapper.Bind一次。 Composition Root是注册所有绑定的好地方。

另一种选择:如果您的TargetSource类型很简单,即您不使用任何忽略或特殊映射。您只拨打TinyMapper.Bind<TTarget, TSource>(),因此根本无法致电Bind并致电Map。在这种简单的情况下,Map调用Bind并且只调用一次。