AutoMapper根据泛型类型确定要映射的内容

时间:2011-03-17 00:07:02

标签: automapper

有没有办法为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);
        }

非常感谢任何帮助。

1 个答案:

答案 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

    }

根据我的经验,只有在事先知道源/目标类型时,泛型重载才有用。