Llamando a un método genérico con el tipo derivado correcto
Tengo el siguiente escenario:
Tengo tres clases, llamémoslasA
, B
yC
. Todo lo que tienen en común es que heredan de la misma interfaz,ISomeInterface
y que son clases que se asignan a entidades utilizando Entity Framework.
Tengo un método que recibió una lista de objetos que implementa esta interfaz, pero los objetos en sí mismos serán instancias deA
, B
oC
.
El método shell se ve así
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
Ahora, el problema es con elProcessEntity
método. Este es un método genérico, que necesita recuperar la tabla de elementos coincidentes de la base de datos según el tipo o la entidad, por lo que se ve así:
public void ProcessEntity<T>(T entity)
{
using( var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
El problema es que la líneavar set = repository.Set<T>();
falla porqueT
esISomeInterface
en este caso, y no el tipo real (A
, B
oC
), por lo que da una excepción que no puede relacionarse con el tipo dado, lo cual es comprensible.
Entonces mi pregunta es: ¿Cómo puedo llamar a ProcessEntity con el tipo real del objeto dentro de la lista, y no con el tipo de interfaz que implementan?