Używam AutoMappera w mojej witrynie ASP.NET MVC do mapowania moich obiektów bazy danych do obiektów ViewModel i próbuję użyć kilku profili do odwzorowania tych samych typów, ale przy użyciu inna logika. Miałem pomysł robi tak czytając Matt's blog post gdzie mówi:Używanie profili w Automaperze do mapowania tego samego typu z inną logiką
Naprawdę kluczowym elementem jest profil konfiguracyjny AutoMapper. Możesz grupować konfiguracje z profilami. Być może w jednym profilu formatujesz daty w jeden sposób, w innym profilu formatujesz daty w inny sposób. Używam tylko jednego profilu tutaj.
Więc stworzyłam profil dla jednej sprawie:
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);
}
}
a drugi do innej sprawy:
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);
}
}
Jednak nie mogę znaleźć żadnego przeciążenia metody Mapper.Map<>()
na podanie profil. Spojrzałem też na obiekt Configuration
bez powodzenia.
Ostatni zarejestrowany profil ma zawsze pierwszeństwo.
Czy istnieje sposób użycia profili do tego celu?
Dzięki, zrobię to! – sebd
Czy to będzie bezpieczne, ale bez blokady? Na przykład "MapperRegistry.AllMappers()" jest statyczne, a "TypeMapFactory" ma słownik statyczny. –
Zazwyczaj konfiguracja jest wywoływana tylko raz dla każdej AppDomain przy uruchomieniu. Po prostu musisz znaleźć odpowiedni szew w dowolnym modelu hostingu, jaki masz, gdzie to działa (inny w przypadku WCF, ASP.NET, WinForms itp.) –