code: @SuppressWarnings("unchecked")
      @Override
      public <E extends R> List<E> retrieveMany(final UniqueKey<E> uniqueKey) {
  
          List<E> readyObjectList = getReadyObjectList(uniqueKey);
  
          // If the component isn't contained into the component map, create and register it
          // or has been collected by the gc
          if (readyObjectList == null || readyObjectList.isEmpty()) {
              try {
  
                  // Build the new instance of the component
                  readyObjectList = buildComponentList(uniqueKey);
  
                  for (final E readyObject : readyObjectList) {
                      // Register it
                      register(readyObject.key(), readyObject);
                      // Double registration, one by Concrete class and another one by Interface (if available)
                      if (readyObject.key().registrationKey() != null) {
                          register((UniqueKey<E>) readyObject.key().registrationKey(), readyObject);
                      }
                      // The component is accessible from facade, let's start its initialization
                      readyObject.setup();
                  }
  
              } catch (final CoreException ce) {
                  LOGGER.error(COMPONENT_RETRIEVAL_ERROR, ce);
                  throw new CoreRuntimeException(ce); // Pop up the exception wrapped into a runtime exception
              }
          }
  
          return readyObjectList;
      }
docs: {@inheritDoc}