@API(status = API.Status.STABLE)
    public synchronized <T> @This @NonNull ParameterInjectorRegistry<C> registerInjector(
            final @NonNull Predicate<TypeToken<?>> predicate,
            final @NonNull ParameterInjector<C, T> injector
    ) {
        this.injectors.add(Pair.of(predicate, injector));
        return this;
    }
Registers an injector for a particular type predicate.

<p>The predicate should only
return true if the injected type is assignable to the tested type. This predicate overload
is provided in addition to {@link #registerInjector(Class, ParameterInjector)} to allow
for exact, non-exact, or custom predicates, however is still bound by the aforementioned constraint.
Failure to adhere to this will result in runtime exceptions.</p>

@param <T>       injected type
@param predicate a predicate that matches if the injector should be used for a type
@param injector  the injector that should inject the value into the command method
@return {@code this}
cloud-core/src/main/java/org/incendo/cloud/injection/ParameterInjectorRegistry.java