private void internalRequireService(
        ServiceSpecification spec, Collection<Service> servicePool, ServiceProvider provider) {

      if (specIsIn(spec, servicePool)) {
        return;
      }

      // check for native provider
      Service service = null;
      try {
        service = bootstrap.getContainer().provideService(spec);

      } catch (ServiceNotAvailableException e) {
        // log ?
      }

      if (service == null && provider != null) {
        service = provider.provide(spec);
      }

      if (service == null) {
        throw new ServiceNotAvailableException(spec.getServiceContractType().getName());
      }

      servicePool.add(service);
    }