0

I refer to the second answer from this topic.

I wrote something like this in my project:

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>
{}

Then I have two methods to whom I refer to one 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;
}

How to use this method with DetailsViewModel children, if they are not generic?

I remark that difference in mapping is in profiles for InitialStandard and AlteredStandard classes.

Camilo Terevinto
  • 31,141
  • 6
  • 88
  • 120
gorrch
  • 521
  • 3
  • 16

1 Answers1

2

I am not completely sure, but I think you are looking for this:

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;
}

Here, you say that T inherits DetailsViewModel<U> where U inherits Standard.

Yannick Meeus
  • 5,643
  • 1
  • 35
  • 34
Camilo Terevinto
  • 31,141
  • 6
  • 88
  • 120