I understand the need for c-tor injections, but having a setter explicitly describes the API needed to build a matcher. Otherwise we'd have to "document" what extensions should do, which isn't a great fit, and likely, will produce annoying exceptions. It's clearer to dictate "to write a matcher, implement this interface exactly, and....done"