ParameterConverterRegistry
Holds ParameterConverters and runs a value through the first one that claims it.
Unlike the result side, converters are kept in one flat list rather than indexed by class, since a parameter converter decides for itself what it accepts. The list is searched most-recent-first and then handed on to the parent registry, so a registration overrides an earlier one without removing it.
Registration is thread-safe and reads are lock-free: adding a converter replaces the list rather than mutating it, so a lookup already in flight completes against the list it started with.
Parameters
The registry to fall back to when nothing here claims a value.
Functions
Registers a converter ahead of everything already here.
Finds the converter that would claim a value, without converting anything.
Same as findConverter, keyed on a class rather than an instance.