我参考this topic的第二个答案。
我在我的项目中写了这样的东西:
public class DetailsViewModel<T> where T : Standard
{
public IList<T> OrderLines { get; set; }
}
public class Standard
{}
public class InitialStandard : Standard {}
public class AlteredStandard : Standard {}
public class InitialDetailsViewModel : DetailsViewModel<InitialStandard>
{}
public class AlteredDetailsViewModel : DetailsViewModel<AlteredStandard>
{}
然后我有两种方法可以引用一个ActionResult:
public void DetailsInitial(long Id)
{
Details<InitialDetailsViewModel>(orderId);
}
public void DetailsAltered(long Id)
{
Details<AlteredDetailsViewModel>(orderId);
}
public ActionResult Details<T>(long Id) where T : DetailsViewModel<Standard>
{
var model = Mapper.Map<T>(order);
return model;
}
如果这些方法不是通用的,如何将这种方法用于DetailsViewModel
个孩子?
我注意到映射的差异在InitialStandard
和AlteredStandard
类的配置文件中。
答案 0 :(得分:2)
我不完全确定,但我认为你正在寻找这个:
public void DetailsInitial(long Id)
{
Details<InitialDetailsViewModel, InitialStandard>(orderId);
}
public void DetailsAltered(long Id)
{
Details<AlteredDetailsViewModel, AlteredStandard>(orderId);
}
public ActionResult Details<T, U>(long Id)
where T : DetailsViewModel<U>
where U : Standard
{
var model = Mapper.Map<T>(order);
return model;
}
在此,您要说T
继承DetailsViewModel<U>
U
继承Standard
。