0

こんにちは、私が作成したカスタム pagedlist コレクションのマッピングに問題があります。

次のような pagedList インターフェイスがあります。

public interface IPagedList<T> : IList<T>

そして実装:

public class PagedList<T> : List<T>, IPagedList<T>

マッピング構成:

Mapper.CreateMap<User, DestinationViewModel>()
  .ForMember(f => f.Score, m => m.MapFrom(s => s.anotherProperty));

次のように、コントローラー アクションでコレクションをマップしようとしています。

var users = userService.GetPagedUsers(page, size, sort, direction);
var model = Mapper.Map<IPagedList<User>, IPagedList<DestinationViewModel>>(users);

まず、これを行うことは可能ですか?私はスタック上でスカウトを行いましたが、決定的な答えは見つかりませんでした。InvalidCastOperations は、Automapper によってスローされた、User のジェネリック コレクションを DestinationViewModel の pagedlist にマップできません。モデルへのマッピング時に IList のような別のリスト タイプを使用しても問題ありませんが、すべてのページング機能に対して IPagedList インターフェイスを使用する必要があります。これについて私の髪を長く伸ばしすぎていたので、どんな助けでも大歓迎です。

4

3 に答える 3

0

実際、この問題には解決策があると思います。

マッピング構成:

Mapper.CreateMap<User, DestinationViewModel>();
Mapper.CreateMap<PagedList<User>, PagedList<DestinationViewModel>>()
      .AfterMap((s, d) => Mapper.Map<List<User>, List<DestinationViewModel>>(s, d));

次に、サービス/コントローラーで:

var users = userService.GetPagedUsers(page, size, sort, direction);
var model = Mapper.Map<PagedList<User>, PagedList<DestinationViewModel>>(users);

インターフェイス(IPagedList)は使用せず、実装(PagedList)のみを使用しました。

于 2014-02-13T11:41:46.167 に答える