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