4

私はJimmy Bogard's advice for automapping through an actionfilter(ほとんどの場合にうまくいく)に従おうとしています。しかし、マップする必要があるコレクションプロパティを持つカスタムビューモデルを持っていたらどうなりますか?例えば、IEnumerable <T>のプロパティを持つViewModelにオートマッテを使用する方法

public class WidgetSearchViewModel 
{ 
    public WidgetSearchOptionsViewModel Options { get; set; } 
    public GenericListPagerViewModel Pager { get; set; } 
    public IEnumerable<WidgetSearchResultModel> Results { get; set; } 
} 

結果プロパティは、私がautomapperを使用してWidgetSearchResultModelインスタンスに変換したいドメインエンティティのIEnumerableを、などのリポジトリから来ています。問題は、オプションとポケベルのプロパティを設定するためにコントローラにWidgetSearchViewModelを構築する必要があることです。 AutoMapper ActionFilterを使用してResultsプロパティOnActionExecutedを設定するにはどうすればよいですか?それは可能でしょうか、あるいはMapper.Mapコールをコントローラに入れ、ユニットテストのすべてのマッピングをブートストラップする必要がありますか?

答えて

2

Automapperは、すでにIEnumerableを実装しているネストしたセット間のマッピングをサポートしています。親と子のプロパティマッピングを定義すると、automapperはネストされたコレクションをうまくマッピングします。あなたがCustomTypeConvertorを実装している場合

Automapperも何にでも何かをマッピング処理することができます:http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters&referringTitle=Home

+1

また、ユニットテストは)(Mapper.AssertConfigurationIsValidを呼び出すことができます。あなたの設定をテストすることができます。 – CRice

+0

ありがとうございました。私の質問にWidgetSearchViewModelクラスの例と同等のドメイン/エンティティがない場合、どうすれば私のコントローラコードを書くことができますか?コントローラーは、オプションとポケットベルのプロパティーに値を設定する必要があります。このプロパティーには、同等のエンティティーはありません。 IEnumerable Resultsプロパティを持つ一致するDTOクラスを作成し、それをコントローラに入力してAutomapperを変換する必要がありますか?または、このようなシナリオのためにコントローラにマッピングを残す方がよいでしょうか?どうしますか? – danludwig

関連する問題