web-dev-qa-db-ja.com

Automapperでプロファイルを使用して、同じタイプを異なるロジックでマップする

ASP.NET MVC WebサイトでAutoMapperを使用してデータベースオブジェクトをViewModelオブジェクトにマップし、複数のプロファイルを使用して同じタイプをマップしようとしていますが、別のロジックを使用しています。私は Mattのブログ投稿 を読んでそうすることを考えていました。

本当に重要な部分はAutoMapper構成プロファイルです。プロファイルを使用して構成をグループ化できます。たぶん、あるプロファイルでは日付をある方法でフォーマットし、別のプロファイルでは別の方法で日付をフォーマットします。ここでは1つのプロファイルを使用しています。

そこで、1つのケースのプロファイルを作成しました。

_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オブジェクトを調べました。
常に最後に登録されたプロファイルが優先されます。

この目的でプロファイルを使用する方法はありますか?

37
sebd

プロファイルは、フォーマットなど、いくつかのタイプマップに適用される一般的な構成を分離するためのものです。ただし、型マップは依然としてグローバルです。個別のConfigurationオブジェクトを作成し、それぞれに個別のMappingEngineを作成する方がよいでしょう。 Mapperクラスは、それぞれの静的な外観であり、ライフサイクル管理を備えています。

42
Jimmy Bogard