Aufrufen einer generischen Methode mit dem richtigen abgeleiteten Typ
Ich habe folgendes Szenario:
Ich habe drei Klassen, nennen wir sieA
, B
undC
. Allen gemeinsam ist, dass sie von derselben Schnittstelle erben,ISomeInterface
und dass es sich um Klassen handelt, die mit Entity Framework Entitäten zugeordnet werden.
Ich habe eine Methode, die eine Liste von Objekten erhalten hat, die diese Schnittstelle implementiert, aber die Objekte selbst sind Instanzen vonA
, B
oderC
.
Die Methoden-Shell sieht so aus
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
Jetzt liegt das Problem bei derProcessEntity
Methode. Dies ist eine generische Methode, die die Tabelle der übereinstimmenden Elemente aus der Datenbank nach Typ oder Entität abrufen muss. Sie sieht also folgendermaßen aus:
public void ProcessEntity<T>(T entity)
{
using( var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
Das Problem ist, dass die Leitungvar set = repository.Set<T>();
scheitert daranT
istISomeInterface
in diesem Fall und nicht der tatsächliche Typ (A
, B
oderC
), es gibt also eine Ausnahme, die sich nicht auf den angegebenen Typ beziehen kann, was verständlich ist.
Meine Frage lautet also: Wie kann ich ProcessEntity mit dem tatsächlichen Typ des Objekts in der Liste aufrufen und nicht mit dem von ihnen implementierten Schnittstellentyp?