AutoMapperのドキュメントを調べて、これに対する推奨される解決策を見つけようとしましたが、見つけることができませんでした。
次のようなクラスがあるとしましょう
public class Foo
{
public string Note { get; set; }
}
このクラスはクライアントから入力され、次のドメインオブジェクトクラスにマップされます
public class Bar
{
public IList<Note> Notes { get; set; }
}
ここで、注は
public class Note
{
public string Text { get; set; }
// other properties excluded for brevity
}
Note
のFoo
文字列プロパティを最初にText
の新しいインスタンスのNote
プロパティにマップし、次にそのNote
をNotes
のBar
コレクションに追加したいと思います。 ValueResolver
を使用してこの操作の最初の部分(文字列をNote
の新しいインスタンスにマップする)を実行していますが、2番目の部分(そのアイテムをコレクション内のアイテムにマップする)を実行する方法がわかりません。
これを行う最もクリーンな方法は何ですか?
私はこのようなものがうまくいくはずだと思っています(テストされていません-ただ大声でタイプするだけです):
Mapper.CreateMap<Foo, Bar>().ForMember(d => d.Notes,
opt => opt.MapFrom(s => new List<Note> { new Note { Text = s.Note } });
[〜#〜]編集[〜#〜]
AutoMappers AfterMap
機能を使用することもできます。このラムダは、Automapperが通常のマッピングを行った後に実行されます。
.AfterMap((s,d) => d.Notes.Add(new Note { Text = s.Note }));