Wywołanie metody ogólnej z poprawnym typem pochodnym

Mam następujący scenariusz:

Mam trzy klasy, nazwijmy jeA, B iC. Jedyne co ich łączy to dziedziczenie z tego samego interfejsu,ISomeInterface i że są to klasy odwzorowane na jednostki używające Entity Framework.

Mam metodę, która otrzymała listę obiektów implementujących ten interfejs, ale same obiekty będą instancjamiA, B lubC.

Powłoka metody wygląda tak

public void MyMethod(List<ISomeInterface> entityList)
{
  foreach(var entity in entityList)
  {
    ProcessEntity(entity);
  }
}

Teraz problem jest zProcessEntity metoda. Jest to ogólna metoda, która musi pobrać tabelę pasujących elementów z bazy danych zgodnie z typem lub jednostką, więc wygląda to tak:

public void ProcessEntity<T>(T entity)
{
  using( var repository = new DbRepository())
  {
    var set = repository.Set<T>();
    ...
  }
}

Problem polega na tym, że liniavar set = repository.Set<T>(); zawodzi, ponieważT jestISomeInterface w tym przypadku, a nie rzeczywisty typ (A, B lubC), więc daje wyjątek, który nie może odnosić się do danego typu, co jest zrozumiałe.

Moje pytanie brzmi: jak mogę wywołać ProcessEntity z rzeczywistym typem obiektu na liście, a nie z wprowadzonym przez niego typem interfacetype.

questionAnswers(3)

yourAnswerToTheQuestion