Вы можете поместить спецификацию SomeField в реализации IProcessor (вам нужно добавить дополнительное поле в интерфейс IProcessor) и найти соответствующие записи на основе процессора, который вы используете в данный момент.
Немного кода, чтобы прояснить это:
public interface IProcessor
{
ICollection<OutputEntity> Process(ICollection<InputEntity>> entities);
string SomeField{get;set;}
}
public class Engine
{
public Engine(IEnumerable<IProcessor> processors)
{
//asign the processors to local variable
}
public void ProcessRecords(IService service)
{
// getRecords code etc.
foreach(var processor in processors)
{
processor.Process(typeRecords.Where(typeRecord => typeRecord.SomeField == processor.SomeField));
}
}
}
В качестве альтернативы, вы можете предоставить IP-процессоры в методе ProcessRecords или установить их как Свойства в классе Engine (хотя я предпочитаю внедрение конструктора).
Редактировать
Возможно, вы захотите взглянуть на подход CanProcess в других ответах.Хотя принцип тот же, он обеспечивает еще более расширяемое / надежное решение, если вам нужно изменить критерии, чтобы решить, должен ли процессор обрабатывать типы.