0

IndexModelエンティティのインデックステーブルを作成するほぼすべてのビューモデルに使用する基本クラスがあります。

public class IndexModel<TIndexItem, TEntity> : ViewModel
        where TIndexItem : MappedViewModel<TEntity>, new()
        where TEntity : new()
    {
        public IndexModel()
        {
            Items = new List<TIndexItem>();
        }

        public TIndexItem TemplateItem { get; set; }
        public List<TIndexItem> Items { get; set; }

        public virtual void MapFromEntityList(IEnumerable<TEntity> entityList)
        {
            Items = Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList);
        }
    }

タイプのように、TEntityパラメータは不要だと思います。私の問題は2つあります。TIndexItemMappedViewModel<TEntity>

  1. MapFromEntityListリフレクションを使用して動的にを呼び出す必要がありTEntityます。パラメータのIEnumerable<TEntity>作成はかなり簡単ですが、Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList)呼び出しは困難です。動的に構築された型パラメーターを使用してマップを呼び出すにはどうすればよいですか?

  2. 私のクラスには制約がありますwhere : MappedViewModel<TEntity>, new()。これはそれほど大きな問題ではありません。たとえば、すべてのビューモデルの「型なし」基本クラスはwhere TIndexItem : ViewModel, new()どこにあるかなど、具体性を低くすることができます。次に、がの場合、マッピング呼び出しなどViewModelの特定の処理のみを実行できます。TEntityTIndexItemMappedViewModel<TEntity>

4

1 に答える 1

1

これがあなたが求めているものだと思います:

public class IndexModel<TEntity> : ViewModel
    where TEntity : new()
{
    public IndexModel()
    {
        Items = new List<MappedViewModel<TEntity>>();
    }

    public MappedViewModel<TEntity>TemplateItem { get; set; }
    public List<MappedViewModel<TEntity>> Items { get; set; }

    public virtual void MapFromEntityList(IEnumerable<TEntity> entityList)
    {
        Items = Mapper.Map<IEnumerable<TEntity>, List<MappedViewModel<TEntity>>>(entityList);
    }

}
于 2013-02-10T07:40:09.080 に答える