А кто принимает решение, подходит этому набору свойств обработчик или нет?
Т.е. однозначно ли обработчик определяется набором свойств, может ли быть так что одна и та же комбинация свойств подходит 2м разным обработчикам?
И могут ли быть лишние или опциональные свойства, которые можно игнорировать при выборе обработчика?
Может ли обработчик иметь состояние, т.е. создается ли один инстанс для всех узлов, или новый инстанс для каждого?
Если нет состояния, и набор однозначно определен — то
самое простое решение — иметь хеш-таблицу обработчиков, где хеш-код вычисляется по именам свойств (отсортированным).
Таким образом имея массив IProperty, и имея имя каждой, можно вычислить искомый хеш. Для обработки коллизии
можно сделать метод IProperty.CanBeHandledBy(IHandler), и выцеплять только тот обработчик, для которого все проперти сказали true.