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つあります。TIndexItem
MappedViewModel<TEntity>
MapFromEntityList
リフレクションを使用して動的にを呼び出す必要がありTEntity
ます。パラメータのIEnumerable<TEntity>
作成はかなり簡単ですが、Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList)
呼び出しは困難です。動的に構築された型パラメーターを使用してマップを呼び出すにはどうすればよいですか?私のクラスには制約があります
where : MappedViewModel<TEntity>, new()
。これはそれほど大きな問題ではありません。たとえば、すべてのビューモデルの「型なし」基本クラスはwhere TIndexItem : ViewModel, new()
どこにあるかなど、具体性を低くすることができます。次に、がの場合、マッピング呼び出しなどViewModel
の特定の処理のみを実行できます。TEntity
TIndexItem
MappedViewModel<TEntity>