Chamando um método genérico com o tipo derivado correto

Eu tenho o seguinte cenário:

Eu tenho três classes, vamos chamá-lasA, B eC. Tudo o que eles têm em comum é que eles herdam da mesma interface,ISomeInterface e que são classes mapeadas para entidades usando o Entity Framework.

Eu tenho um método que recebeu uma lista de objetos que implementa essa interface, mas os objetos em si serão instâncias deA, B ouC.

O shell do método se parece com isso

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

Agora, o problema é com oProcessEntity método. Este é um método genérico, que precisa recuperar a tabela de elementos correspondentes do banco de dados de acordo com o tipo ou entidade, de modo que fique assim:

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

O problema é que a linhavar set = repository.Set<T>(); falha porqueT éISomeInterface neste caso, e não o tipo real (A, B ouC), por isso dá uma exceção que não pode se relacionar com o tipo dado, o que é compreensível.

Então, minha pergunta é: Como posso chamar ProcessEntity com o tipo real do objeto dentro da lista, e não o interfacetype que eles implementam.

questionAnswers(3)

yourAnswerToTheQuestion