編集:もともと私は自分の目標を達成するために AutoMapper を使用するつもりでしたが、AutoMapper はそのように動作することを意図していないことを学ばなければなりませんでした。プロファイルを作成する可能性がありますが、私の場合 (完全に構成可能)、パラメーターの組み合わせごとに 1 つのプロファイルが必要になるため、独自のアプローチを思いつきました。回答を参照してください。
AutoMapper wiki から、次のような単純なマッピングを作成することを学びました
Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title));
Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.EventDate.Date));
Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.EventDate.Hour));
Mapper.CreateMap<CalendarEvent, CalendarEventForm>().ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.EventDate.Minute));
次のような2つのクラスの場合
public class CalendarEvent
{
public DateTime EventDate;
public string Title;
}
public class CalendarEventForm
{
public DateTime EventDate { get; set; }
public int EventHour { get; set; }
public int EventMinute { get; set; }
public string Title { get; set; }
}
マッピングを外部で、つまり次のような XML ファイルで定義する可能性があるかどうか疑問に思っていました。
<ObjectMapping>
<mapping>
<src>Title</src>
<dest>Tile</dest>
</mapping>
<mapping>
<src>EventDate.Date</src>
<dest>EventDate</dest>
</mapping>
<mapping>
<src>EventDate.Hour</src>
<dest>EventHour</dest>
</mapping>
<mapping>
<src>EventDate.Minute</src>
<dest>EventMinute</dest>
</mapping>
その影響により、マップの作成に影響を与えます (XML は必須ではなく、他のすべてのものでもかまいません)。簡単にするために、タイプは問題ではないとします。したがって、src と dest は同じである必要があります。そうでない場合は、失敗しても問題ありません。この背後にある考え方は、何をどこにマッピングするかを非常に柔軟にすることです。その名前に基づいてプロパティ値を取得するリフレクションを考えていましたが、これはうまくいかないようです。また、これがまったく意味があるのか 、それとも何か重要なものが欠けているのかわからないので、助けやアイデアをいただければ幸いです.