有没有办法为AutoMapper提供一个源,并根据指定的映射为该源的类型自动确定要映射的内容?
所以例如我有一种类型的Foo,我总是希望它映射到Bar,但在运行时我的代码可以接收许多泛型类型中的任何一种。
public T Add(T entity)
{
//List of mappings
var mapList = new Dictionary<Type, Type> {
{typeof (Foo), typeof (Bar)}
{typeof (Widget), typeof (Sprocket)}
};
//Based on the type of T determine what we map to...somehow!
var t = mapList[entity.GetType()];
//What goes in ?? to ensure var in the case of Foo will be a Bar?
var destination = AutoMapper.Mapper.Map<T, ??>(entity);
}
非常感谢任何帮助。
答案 0 :(得分:3)
正如@tobsen所说,非通用重载是你需要的:
public T Add(T entity)
{
//List of mappings
var mapList = new Dictionary<Type, Type> {
{typeof (Foo), typeof (Bar)}
{typeof (Widget), typeof (Sprocket)}
};
Type sourceType = typeof(T);
Type destinationType = mapList[sourceType];
object destination = AutoMapper.Mapper.Map(entity, sourceType, destinationType);
// ... rest of code
}
根据我的经验,只有在事先知道源/目标类型时,泛型重载才有用。