Вызов универсального метода с правильным производным типом
У меня есть следующий сценарий:
У меня есть три класса, давайте назовем ихA
, B
а такжеC
, Все, что у них общего, это то, что они наследуются от одного и того же интерфейса,ISomeInterface
и что они являются классами, которые сопоставляются с сущностями, использующими Entity Framework.
У меня есть метод, который получил список объектов, который реализует этот интерфейс, но сами объекты будут экземплярамиA
, B
или жеC
.
Оболочка метода выглядит следующим образом
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
Теперь проблема сProcessEntity
метод. Это универсальный метод, который должен извлечь таблицу соответствующих элементов из базы данных в соответствии с типом или сущностью, поэтому он выглядит следующим образом:
public void ProcessEntity<T>(T entity)
{
using( var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
Проблема в том, что линияvar set = repository.Set<T>();
не удается, потому чтоT
являетсяISomeInterface
в данном случае, а не фактический тип (A
, B
или жеC
), поэтому он дает исключение, которое не может относиться к данному типу, что понятно.
Поэтому мой вопрос: как я могу вызвать ProcessEntity с фактическим типом объекта внутри списка, а не с типом интерфейса, который они реализуют.