web-dev-qa-db-fra.com

Utilisation de profils dans Automapper pour mapper les mêmes types avec une logique différente

J'utilise AutoMapper dans mon site Web ASP.NET MVC pour mapper mes objets de base de données aux objets ViewModel et j'essaie d'utiliser plusieurs profils pour mapper les mêmes types, mais en utilisant une autre logique. J'ai eu l'idée de le faire en lisant le blog de Matt où il dit:

La partie vraiment clé est le profil de configuration d'AutoMapper. Vous pouvez regrouper des configurations avec des profils. Peut-être que dans un profil, vous formatez les dates d'une manière, dans un autre profil, vous formatez les dates d'une autre manière. J'utilise juste un profil ici.

J'ai donc créé un profil pour un cas:

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);
    }
}

Et un autre pour un autre cas:

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);
    }
}

Cependant, je ne trouve aucune surcharge de la méthode Mapper.Map<>() pour spécifier un profil. J'ai également jeté un œil à l'objet Configuration sans succès.
Le dernier profil enregistré a toujours la priorité.

Existe-t-il un moyen d'utiliser des profils à cette fin?

37
sebd

Les profils permettent de séparer la configuration commune appliquée à plusieurs mappages de types, comme le formatage. Cependant, les mappes de types sont toujours globales. Vous feriez mieux de créer des objets de configuration séparés et de créer un moteur de mappage distinct pour chacun. La classe Mapper n'est qu'une façade statique sur chacun d'eux, avec une certaine gestion du cycle de vie.

42
Jimmy Bogard