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.