web-dev-qa-db-ja.com

プロパティをコレクションアイテムにマップします

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
}

NoteFoo文字列プロパティを最初にTextの新しいインスタンスのNoteプロパティにマップし、次にそのNoteNotesBarコレクションに追加したいと思います。 ValueResolverを使用してこの操作の最初の部分(文字列をNoteの新しいインスタンスにマップする)を実行していますが、2番目の部分(そのアイテムをコレクション内のアイテムにマップする)を実行する方法がわかりません。

これを行う最もクリーンな方法は何ですか?

19
Russ Cam

私はこのようなものがうまくいくはずだと思っています(テストされていません-ただ大声でタイプするだけです):

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