@API(status = API.Status.STABLE)
    public <T> @NonNull Optional<T> getInjectable(
            final @NonNull TypeToken<T> type,
            final @NonNull CommandContext<C> context,
            final @NonNull AnnotationAccessor annotationAccessor
    ) {
        final InjectionRequest<C> request = InjectionRequest.of(context, type, annotationAccessor);
        try {
            final Object rawResult = this.servicePipeline.pump(request).through(new TypeToken<InjectionService<C>>() {
            }).complete();

            if (!request.injectedClass().isInstance(rawResult)) {
                throw new IllegalStateException(String.format(
                        "Injector returned type %s which is not an instance of %s",
                        rawResult.getClass().getName(),
                        request.injectedClass().getName()
                ));
            }
            @SuppressWarnings("unchecked")
            final T result = (T) rawResult;

            return Optional.of(result);
        } catch (final IllegalStateException ignored) {
            return Optional.empty();
        } catch (final InjectionException injectionException) {
            throw injectionException;
        } catch (final Exception e) {
            throw new InjectionException(
                    String.format("Failed to inject type %s", type.getType().getTypeName()),
                    e
            );
        }
    }
Attempts to get an injectable value for the given context.

<p>This will consider all registered {@link InjectionService injection services}, and not just the
{@link ParameterInjector injectors} registered using {@link #registerInjector(Class, ParameterInjector)}.</p>

@param <T>                type to inject
@param type               type to inject
@param context            the command context that requests the injection
@param annotationAccessor annotation accessor for the injection. If the object is requested without access to annotations,
                          use {@link AnnotationAccessor#empty()}
@return the injected value, if an injector was able to provide a value
@throws InjectionException if any of the {@link InjectionService injection services} throws an exception
cloud-core/src/main/java/org/incendo/cloud/injection/ParameterInjectorRegistry.java