Dav*_*eau 6 .net c# automapper
我有一个简单的问题:如何在ConstructUsing中使用Mapper.Map?我正在使用AutoMapper v4.1.1,我有这个代码,我想通过重用代码来清理它.
Mapper.CreateMap<SKU, SKUViewModel>()
.ConstructUsing(m => new SKUViewModel((from texts in m.DescriptionTranslation.TranslationTexts
select new TranslationTuple
{
LanguageId = texts.LanguageId,
LanguageDisplayName = texts.Language.DisplayName,
TranslationText = texts.Text,
NeutralText = texts.NeutralText,
ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
}).ToList(),
(from texts in m.DisplayNameTranslation.TranslationTexts
select new TranslationTuple
{
LanguageId = texts.LanguageId,
LanguageDisplayName = texts.Language.DisplayName,
TranslationText = texts.Text,
NeutralText = texts.NeutralText,
ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
}).ToList(),
(from texts in m.PaypalDescriptionTranslation.TranslationTexts
select new TranslationTuple
{
LanguageId = texts.LanguageId,
LanguageDisplayName = texts.Language.DisplayName,
TranslationText = texts.Text,
NeutralText = texts.NeutralText,
ThreeLetterIsoLanguageName = texts.Language.ThreeLetterISOLanguageName
}).ToList()
));
Run Code Online (Sandbox Code Playgroud)
我知道我们可以像这样使用Mapper.Map和AfterMap方法 Mapper.Map
但是我无法在ConstructUsing中做同样的事情.
有什么建议吗?
大卫
由于您为这些实体定义了映射,因此可以在其上调用Mapper.Map.样品:
Mapper.CreateMap<SKU, SKUViewModel>()
.ConstructUsing(m =>
{
var descriptions = Mapper.Map<List<TranslationTuple>>(m.DescriptionTranslation.TranslationTexts);
var displays = Mapper.Map<List<TranslationTuple>>(m.DisplayNameTranslation.TranslationTexts);
var paypals = Mapper.Map<List<TranslationTuple>>(m.PaypalDescriptionTranslation.TranslationTexts);
return new SKUViewModel(descriptions, displays, paypals);
});
Run Code Online (Sandbox Code Playgroud)
然后,当您需要创建一个由automapper映射的对象时,只需使用:
var viewModel = Mapper.Map<List<SKUViewModel>>(sku);
Run Code Online (Sandbox Code Playgroud)
类似的方法ConstructUsing,AfterMap,BeforeMap是你拥有的一切定义之后执行的方法.因此,遵循这个逻辑,它应该Mapper.Map<>没有问题地执行.