public <Context, Result> ServicePipeline registerServiceImplementation(
            final @NonNull TypeToken<? extends Service<Context, Result>> type,
            final @NonNull Service<Context, Result> implementation,
            final @NonNull Collection<Predicate<Context>> filters
    ) {
        synchronized (this.lock) {
            final ServiceRepository<Context, Result> repository = this.getRepository(type);
            repository.registerImplementation(implementation, filters);
        }
        return this;
    }
Register a service implementation for a type that is recognized by the pipeline. It is
important that a call to {@link #registerServiceType(TypeToken, Service)} has been made
beforehand, otherwise a {@link IllegalArgumentException} will be thrown

@param type           Service type
@param implementation Implementation of the service
@param filters        Filters that will be used to determine whether or not the service gets
                      used
@param <Context>      Service context type
@param <Result>       Service result type
@return ServicePipeline The service pipeline instance
cloud-services/src/main/java/org/incendo/cloud/services/ServicePipeline.java