在Automapper中使用configuration文件以不同的逻辑映射相同的types
我在我的ASP.NET MVC网站中使用AutoMapper将我的数据库对象映射到ViewModel对象,我试图使用几个configuration文件来映射相同的types,但使用另一个逻辑。 我有这样的想法,通过阅读马特的博客文章 ,他说:
真正关键的部分是AutoMapperconfiguration文件。 您可以将configuration与configuration文件分组。 也许在一个configuration文件中,您以一种方式格式化date,在另一个configuration文件中,以另一种方式格式化date 我只是在这里使用一个configuration文件。
所以我创build了一个案例的configuration文件:
public class MyProfile : Profile { protected override string ProfileName { get { return "MyProfile"; } } protected override void Configure() { CreateMap<DateTime, String>().ConvertUsing<StringFromDateTimeTypeConverter>(); } } public class StringFromDateTimeTypeConverter : ITypeConverter<DateTime, String> { public string Convert(DateTime source) { return source.ToString("dd/mm/yyyy", CultureInfo.InvariantCulture); } }
另一个案例是:
public class MyProfile2 : Profile { protected override string ProfileName { get { return "MyProfile2"; } } protected override void Configure() { CreateMap<DateTime, String>().ConvertUsing<AnotherStringFromDateTimeTypeConverter>(); } } public class AnotherStringFromDateTimeTypeConverter : ITypeConverter<DateTime, String> { public string Convert(DateTime source) { return source.ToString("mm - yyyy", CultureInfo.InvariantCulture); } }
但是,我找不到任何重载Mapper.Map<>()
方法来指定configuration文件。 我也看到了Configuration
对象没有运气。
最后注册的configuration文件总是优先。
有没有办法使用configuration文件来达到这个目的?
configuration文件用于分隔应用于多个types映射的通用configuration,如格式化。 但是,types映射仍然是全局的。 你最好创build单独的configuration对象,并为每个创build一个单独的MappingEngine。 Mapper类仅仅是一个静态的外观,有一些生命周期pipe理。