3

UserProfileEditorViewModel次のように、型を型にマップしようとしてUserProfileいます。

public ActionResult Edit(UserProfileEditorViewModel userProfileViewModel)
        {
            UserProfile user = _getUserByIdQuery.Invoke(SessionData.UserId);

            Mapper.Map(userProfileViewModel, user);

現在、このエラーがスローされます:

指定された値は System.String 型ですが、MyNamespace.Web.Models.UserProfileEditorViewModel が必要です。

ライン上Mapper.Map(userProfileViewModel, user);

このための私のマッピング構成は次のようになります。

Mapper.CreateMap<UserProfileEditorViewModel, UserProfile>()
                .ForMember(
                   dto => dto.Tags, 
                   opt => opt.ResolveUsing<TagNameStringToTagCollectionResolver>());

次のようになりTagNameStringToTagCollectionResolverます。

 protected override IEnumerable<Tag> ResolveCore(string source)
        {
            return _getTagsByNamesQuery.Invoke(source.Split(','));
        }

その例外をスローする理由はありますか? 私は Automapper を初めて使用し、少し困惑しています。

4

1 に答える 1

3

ここでの問題は、そのメソッドTagNameStringToTagCollectionResolverでタイプのパラメーターを受け入れる必要があることです。UserProfileEditorViewModelResolveCore

表示されているエラー メッセージは、マッピングのどこかが type の値をstring提供する必要があるときに、そのメソッド シグネチャで type の値を提供していることを示していますUserProfileEditorViewModel

言葉遣いを考えると少し紛らわしい例外ですが、これが私が問題を解決した方法です。

protected override IEnumerable<Tag> ResolveCore(UserProfileEditorViewModel source)
        {
            return _getTagsByNamesQuery.Invoke(source.Tags.Split(','));
        }
于 2012-06-22T10:31:47.857 に答える