42

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

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

4

2 に答える 2

48

プロファイルは、書式設定など、複数のタイプ マップに適用される共通の構成を分離するためのものです。ただし、型マップは依然としてグローバルです。個別の Configuration オブジェクトを作成し、それぞれに個別の MappingEngine を作成することをお勧めします。Mapper クラスは、ライフサイクル管理を備えた、それらのそれぞれに対する単なる静的ファサードです。

于 2010-02-04T01:52:10.117 に答える