我剛開始使用AutoMapper,並且迄今爲止發現它非常直接且省時。使用AutoMapper映射'X'類型的所有屬性
只是我不確定的一件事 - 我如何以同樣的方式映射給定類型的所有屬性?
這可以通過AutoMapper在單個語句中使用lambda來完成,就像使用常規映射一樣?
我剛開始使用AutoMapper,並且迄今爲止發現它非常直接且省時。使用AutoMapper映射'X'類型的所有屬性
只是我不確定的一件事 - 我如何以同樣的方式映射給定類型的所有屬性?
這可以通過AutoMapper在單個語句中使用lambda來完成,就像使用常規映射一樣?
您正在查找的是被稱爲CustomTypeConverter
。這些是全球性的,只需要配置一次。
的語法是:
Mapper.CreateMap<TSourceProperty,TDestinationProperty>().ConvertUsing(argument);
其中argument
可以是
ITypeConverter<TSourceProperty,TDestinationProperty>
Func<TSourceProperty,TDestinationProperty>
麥博加德對在實施CustomTypeConverter
秒的物品http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/05/05/automapper-feature-custom-type-converters.aspx。
CustomTypeConverter page of the AutoMapper documentation也提供了更多信息。
哦,順便說一下(因爲我想要Omu的賞金),你也可以通過切換到價值觀投注。
這不是真的一樣,如果你需要不同的算法從int轉換到Foo來獲得更多的映射(可能你必須在映射之前每次調用CreateMap),或者如果你需要映射所有繼承某個特定類型的類型基類到int,你會怎麼做 – Omu 2011-03-22 20:51:16
你只需要對每個應用程序實例的'CreateMap'進行一次調用。如果您需要在不同的上下文中將「int」映射爲「Foo」,則應該將其聲明爲基於屬性的映射,而不是基於類型的映射。在這些情況下,您可以使用[自定義值解析器](http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers&referringTitle=Home)將複雜的'int'指定爲'Foo'映射,然後使聲明Mapper.CreateMap
@Omu,映射所有繼承某個基類,你可以使用反射來獲得所有派生類型,然後遍歷它們並調用'CreateMap'。這可能是昂貴的,應該可以在你的IoC配置中完成,但靜態調用將看起來像'void MapSubTypes
嘗試這一個http://valueinjecter.codeplex.com/,它被設計爲從一個特定類型的所有道具映射到另一個在首位 – Omu 2010-09-02 21:16:25
感謝@Omu。你爲什麼不添加這個答案? – Jonathan 2010-09-02 23:13:04